我有一个SQL服务器数据库,里面已经预先加载了大量的数据行。
不幸的是,数据库中没有主键,现在表中有重复的信息。我并不担心没有主键,但我担心数据库中有重复项...
你有什么想法吗?(原谅我是SQL服务器新手)
我有一个SQL服务器数据库,里面已经预先加载了大量的数据行。
不幸的是,数据库中没有主键,现在表中有重复的信息。我并不担心没有主键,但我担心数据库中有重复项...
你有什么想法吗?(原谅我是SQL服务器新手)
好的,这是为什么应该在表上有一个主键的原因之一。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 可以让你仅选择重复的行。