SQL Server 重复行删除方法
这篇文章主要为大家详细介绍了SQL Server 重复行删除方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
Microsoft SQL Server 表不应该包含重复行和非唯一主键。为简洁起见,在本文中我们有时称主键为“键”或“PK”,但这始终表示“主键”。重复的 PK 违反了实体完整性,在关系系统中是不允许的。SQL Server 有各种强制执行实体完整性的机制,包括索引、唯一约束、主键约束和触发器。尽管如此,在某些情况下还可能会出现重复的主键;如果出现此类情况,就必须清除重复主键。出现重复主键的情形之一是,在 SQL Server 外部的非关系数据中存在重复的 PK,在导入这些数据时没有强制执行 PK 唯一性。出现重复主键的另一种情形来自数据库设计错误,如没有对每张表强制执行实体完整性。 通常在尝试创建唯一索引时会发现重复的 PK,因为如果找到重复的键,唯一索引的创建即会中止,并且将显示以下消息: Msg 1505, Level 16, State 1 Create unique index aborted on duplicate key. 如果使用的是 SQL Server 2000 或 SQL Server 2005,则会收到以下错误消息: Msg 1505, Level 16, State 1 CREATE UNIQUE INDEX terminated because a duplicate key was found for object name '%.*ls' and index name '%.*ls'.The duplicate key value is %ls. 本文讨论如何查找和删除表中重复的主键。但是,您应该仔细检查出现重复键的进程以避免重复出现。 更多信息 在该示例中,我们将使用下表,它具有重复的 PK 值。在该表中,主键是两列(col1、col2)。我们无法创建唯一索引或主键约束,因为这两行具有重复的 PK。该过程演示如何识别和删除重复的主键。
代码如下:
1 2 3 4 5 6 | <code> create table t1(col1 int, col2 int, col3 char(50)) insert into t1 values (1, 1, 'data value one' ) insert into t1 values (1, 1, 'data value one' ) insert into t1 values (1, 2, 'data value two' ) </code> |
代码如下:
1 2 3 4 5 6 | <code> SELECT col1, col2, count (*) FROM t1 GROUP BY col1, col2 HAVING count (*) > 1 </code> |
代码如下:
1 2 3 4 5 | <code> set rowcount 1 delete from t1 where col1=1 and col2=1 </code> |
代码如下:
1 2 3 4 5 6 7 | <code> SELECT col1, col2, col3= count (*) INTO holdkey FROM t1 GROUP BY col1, col2 HAVING count (*) > 1 </code> |
代码如下:
1 2 3 4 5 6 7 | <code> SELECT DISTINCT t1.* INTO holddups FROM t1, holdkey WHERE t1.col1 = holdkey.col1 AND t1.col2 = holdkey.col2 </code> |
代码如下:
1 2 3 4 5 | <code> SELECT col1, col2, count (*) FROM holddups GROUP BY col1, col2 </code> |
代码如下:
1 2 3 4 5 6 | <code> DELETE t1 FROM t1, holdkey WHERE t1.col1 = holdkey.col1 AND t1.col2 = holdkey.col2 </code> |
注:关于SQL Server 重复行删除方法的内容就先介绍到这里,更多相关文章的可以留意