SQL:删除SQL Server中的重复记录

时间:2009-11-20 19:00:53

标签: sql sql-server sql-server-2008 sql-server-2008-express

我有一个sql server数据库,我预先加载了大量的数据行。

不幸的是,数据库中没有主键,表中现在有重复的信息。我并不担心没有主键,但我担心数据库中存在重复...

有什么想法? (原谅我是一个新的SQL服务器)

4 个答案:

答案 0 :(得分:13)

嗯,这就是为什么你应该在桌子上有一个主键的原因之一。什么版本的SQL Server?对于SQL Server 2005及更高版本:

;WITH r AS
(
    SELECT col1, col2, col3, -- whatever columns make a "unique" row
    rn = ROW_NUMBER() OVER (PARTITION BY col1, col2, col3 ORDER BY col1)
    FROM dbo.SomeTable
)
DELETE r WHERE rn > 1;

然后,所以你明天不必再这样做,第二天和之后的那一天,在桌子上宣布一个主键。

答案 1 :(得分:0)

关于没有主键的表的Deleting duplicate records in SQL Server这篇文章可以帮助您解决问题。

答案 2 :(得分:0)

看看这个。

“删除在表的所有列中重复的数据并不困难。更难的是根据业务规则删除您认为重复的数据,而SQL Server认为它是唯一数据”

http://www.sql-server-performance.com/articles/dba/delete_duplicates_p1.aspx

答案 3 :(得分:0)

假设你的桌子是COL1和COL2独有的。
这是一种方法:

SELECT *
FROM (SELECT COL1, COL2, ROW_NUMBER() OVER (PARTITION BY COL1, COL2 ORDER BY COL1, COL2 ASC) AS ROWID
      FROM TABLE_NAME )T
WHERE T.ROWID > 1

ROWID> 1将使您只能选择重复的行。