6

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

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

有什么想法吗?(原谅我是一个 sql server 新手)

4

2 回答 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;

然后,这样你明天就不必再这样做了,第二天,再后天,在表上声明一个主键。

于 2009-11-20T19:04:22.720 回答
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 将使您能够仅选择重复的行。

于 2009-11-20T19:08:38.513 回答