SQL-表中的重复行的实际操作步骤-Server-正确删除 (sql表中的小写替换为大写)

教程大全 2025-07-16 12:29:55 浏览

此文章主要是教会大家如何正确删除 SQL Server 表中的重复行,我们大家都知道Microsoft SQL Server 数据库中的实际应用表其不应该包含重复行与非唯一主键。为简洁起见,在本文中我们有时称主键为“键”或“PK”,但这始终表示“主键”。

重复的 PK 违反了实体完整性,在关系系统中是不允许的。SQL Server 有各种强制执行实体完整性的机制,包括索引、唯一约束、主键约束和触发器。

尽管如此,在某些情况下还可能会出现重复的主键;如果出现此类情况,就必须清除重复主键。出现重复主键的情形之一是,在 SQL Server 外部的非关系数据中存在重复的 PK,在导入这些数据时没有强制执行 PK 唯一性。出现重复主键的另一种情形来自数据库设计错误,如没有对每张表强制执行实体完整性。

通常在尝试创建唯一索引时会发现重复的 PK,因为如果找到重复的键,唯一索引的创建即会中止,并且将显示以下消息:

如果使用的是 SQL Server 2000 或 SQL Server 2005,则会收到以下错误消息:

本文讨论如何查找和删除 SQL Server 表中的重复的主键。但是,您应该仔细检查出现重复键的进程以避免重复出现。

更多信息

在该示例中,我们将使用下表,它具有重复的 PK 值。在该表中,主键是两列(col1、col2)。我们无法创建唯一索引或主键约束,因为这两行具有重复的 PK。该过程演示如何识别和删除 SQL Server 表重复的主键。

第一步是识别哪些行具有重复的主键值:

这将为表中的每组重复的 PK 值返回一行。此结果中的最后一列是特定 PK 值的重复数。

如果只有几组重复的 PK 值,则最佳方法是手动逐个删除它们。例如:

rowcount 值应该是给定键值的重复数减去 1。在该示例中,有 2 个重复的主键,所以 rowcount 被设置为 1。col1/col2 值来自上面的 GROUP BY 查询结果。如果 GROUP BY 查询返回多行,则“set rowcount”查询将必须为这些行中的每一行各运行一次。每次运行该查询时,将 rowcount 设置为特定 PK 值的重复数减去 1。

表中的重复行的实际操作步骤

在删除行之前,您应该验证是否整行重复。虽然整行重复不太可能发生,但可能 PK 值重复,而整行不重复。例如一个将身份证号码作为主键的表,该表有两个具有相同号码的不同的人(即行),但每个人有唯一的属性。在这种情况下,任何引起重复键的问题可能还引起在行中放入有效的唯一的数据。在删除该数据之前,应该将该数据复制出来并保存下来以进行研究和适当的调整。

如果表中有多组完全不同的重复的 PK 值,则逐个删除 SQL Server 表中的重复行会很费时间。在这种情况下,可使用下面的方法: 1.首先,运行上面的 GROUP BY 查询来确定有多少组重复的 PK 值及每组的重复数。

2.选择重复的键值放入临时表中。例如:

3.选择重复的行放入临时表中,以清除进程中的重复值。例如:

4.此时,holddups 表应有唯一的 PK;但是,如果 t1 有重复的 PK 而行唯一(如上面的 SSN 示例),情况就不是这样了。请验证 holddups 中的各个键是否唯一,是否没有键重复而行唯一的情况。如果是这样,您必须停在该处,确定对于给定重复的键值,您希望保留哪些行。例如,以下查询:

应为各行返回计数 1。如果结果是 1,请继续执行下面的步骤 5。如果不是 1,则存在键重复而行唯一的情况,且需要您决定要保存哪些行。通常,这将需要舍弃行或为此行创建新的唯一的键值。为 holddups 表中每个此种重复 PK 执行这两个步骤之一。

5.从原始表中删除 SQL Server 表中的重复行。例如:

6.将唯一行放回原始表中。例如:

【编辑推荐】


SQL查询中表的数据如图一 查询a列中数据一样的,然后保留第一行,删除掉重复的。效果图如2

一样,改成select,去掉notselect * from tb where exists(select 1 from tb as a where a.a=tb.a and group by min(a.c)=tb.c)

sql中删除重复数据

图片很模糊看不清,你看看下面方法可以吗

去除表A的重复值

user MyDB --进入需要修改的数据库中select distinct * into #tmp from [A] --先将数据存入一张临时表中,剔除重复项truncate table [A] --然后清空原表insert into [A] select * from #tmp --再将临时表内容插入表Adrop table #tmp --删除临时表

你的COl001 是一样的啊,你表里有主键码,或者自增字段?

你表里不算有重复值的啊,虽然前边一样,后边字段是不一样的,这样还算重复?

如何删除 SQL Server 表中的重复行

假设表名为:ta其中 id 为主键其中:key_name 就是你需要不发生重复的字段删除重复项------------------------------------------------------------------------------------deletetawhere id not in ( select max(id) from group bykey_name )------------------------------------------------------------------------------------要显示不重复项的数据select* from tawhere id in ( select max(id) from group bykey_name) ------------------------------------------------------------------------------------希望能给你点帮助。happy day

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐