我有一个sql server数据库,我预先加载了大量的数据行。
不幸的是,数据库中没有主键,表中现在有重复的信息。我并不担心没有主键,但我担心数据库中存在重复...
有什么想法? (原谅我是一个新的SQL服务器)
答案 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)
看看这个。
“删除在表的所有列中重复的数据并不困难。更难的是根据业务规则删除您认为重复的数据,而SQL Server认为它是唯一数据”
http://www.sql-server-performance.com/articles/dba/delete_duplicates_p1.aspx
答案 2 :(得分: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将使您只能选择重复的行。
答案 3 :(得分:0)
关于没有主键的表的Deleting duplicate records in SQL Server这篇文章可以帮助您解决问题。