En supposant qu'il n'y ait pas de valeur nulle, vous GROUP BY
les colonnes uniques, et SELECT
le MIN (or MAX)
RowId comme ligne à conserver. Ensuite, supprimez simplement tout ce qui n'avait pas d'identifiant de ligne :
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
Si vous avez un GUID au lieu d'un entier, vous pouvez remplacer
MIN(RowId)
avec
CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))