<p>En supposant qu’il n’y a pas de valeurs nulles, vous faites un <code>GROUP BY</code> sur les colonnes uniques et vous sélectionnez le <code>MIN (ou MAX)</code> RowId comme ligne à conserver. Ensuite, vous supprimez simplement tout ce qui n’avait pas de row id :</p>
<pre><code class="lang-auto">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
</code></pre>
<p>Dans le cas où vous avez un GUID au lieu d’un entier, vous pouvez remplacer</p>
<pre><code class="lang-auto">MIN(RowId)
</code></pre>
<p>par</p>
<pre><code class="lang-auto">CONVERT(uniqueidentifier, MIN(CONVERT(char(36), MyGuidColumn)))
</code></pre>