我有一个 sql server 数据库,我预先加载了大量的数据行。
不幸的是,数据库中没有主键,现在表中存在重复信息。我不担心没有主键,但我担心数据库中有重复项......
有什么想法吗?(原谅我是一个 sql server 新手)
我有一个 sql server 数据库,我预先加载了大量的数据行。
不幸的是,数据库中没有主键,现在表中存在重复信息。我不担心没有主键,但我担心数据库中有重复项......
有什么想法吗?(原谅我是一个 sql server 新手)
嗯,这就是为什么你应该在表上有一个主键的原因之一。什么版本的 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;
然后,这样你明天就不必再这样做了,第二天,再后天,在表上声明一个主键。
假设您的表在 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 将使您能够仅选择重复的行。