Supponendo che non ci siano valori nulli, GROUP BY
le colonne univoche e SELECT
il MIN (or MAX)
RowId come riga da mantenere. Quindi, elimina tutto ciò che non aveva un ID riga:
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
Nel caso in cui tu abbia un GUID invece di un numero intero, puoi sostituirlo
MIN(RowId)
con
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))