从相当大的SQL Server表(即300,000+行)中删除重复的行的最佳方法是什么?
由于RowID身份字段的存在,这些行当然不会是完美的重复项。
我的Table
` RowID int not null identity(1,1) primary key, Col1 varchar(20) not null, Col2 varchar(2048) not null, Col3 tinyint not null
假设没有空,你GROUP BY的唯一列,并SELECT在MIN (orMAX)RowId的为行,以保持。然后,只需删除没有行ID的所有内容:
GROUP BY
SELECT
MIN (orMAX)RowId
DELETE FROM MyTable LEFT OUTER JOIN ( SELECT MIN(RowId) as RowId, Col1, Col2, Col3 FROM MyTable GROUP BY Col1, Col2, Col3 ) as KeepRows ON MyTable.RowId = KeepRows.RowId WHERE KeepRows.RowId IS NULL
如果您使用的是GUID而不是整数,则可以替换
MIN(RowId)
和
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))