2009-11-20 77 views
6

我有一个sql server数据库,我预载了大量的数据行。SQL:删除SQL Server中的重复记录

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

有什么想法吗? (原谅我是一个sql服务器newb)

+2

那么,你如何确定重复? – 2009-11-20 19:02:00

+1

http://www.lmgtfy.com/?q=Deleting+duplicate+records+in+SQL+Server – 2009-11-20 19:05:13

+0

您正在使用哪个版本的SQL Server? 2000年,2005年,2008年? – MaxiWheat 2009-11-20 19:08:36

回答

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

谢谢,这个解决了我的问题! – rockit 2009-11-20 20:06:48

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将使你只能选择重复的行。