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

6

我有一个SQL服务器数据库,里面已经预先加载了大量的数据行。

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

你有什么想法吗?(原谅我是SQL服务器新手)


2
那么,你如何确定重复项? - Adriaan Stander
1
http://www.lmgtfy.com/?q=Deleting+duplicate+records+in+SQL+Server - Ben M
你使用的 SQL Server 版本是哪个?2000、2005、还是 2008? - MaxiWheat
13
我不担心自己开枪打中了自己的脚,但我很担心地面上的血迹。 - Lasse V. Karlsen
2个回答

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;

那么,为了避免明天、后天和大后天再次进行这个操作,需要在表上声明一个主键。


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 可以让你仅选择重复的行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接