Om du antar att inga nollvärden saknas, GROUP BY
de unika kolumnerna och SELECT
MIN (or MAX)
RowId som raden att behålla. Ta sedan bara bort allt som inte hade ett rad-ID:
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
Om du har en GUID istället för ett heltal kan du ersätta
MIN(RowId)
med
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))