Eu gosto de CTEs e
ROW_NUMBER
como os dois combinados nos permitem ver quais linhas são excluídas (ou atualizadas), portanto, basta alterar o DELETE FROM CTE...
para SELECT * FROM CTE
:WITH CTE AS(
SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1
DEMO (o resultado é diferente; suponho que seja devido a um erro de digitação de sua parte)
COL1 COL2 COL3 COL4 COL5 COL6 COL7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
Este exemplo determina duplicatas por uma única coluna
col1
por causa da PARTITION BY col1
. Se você quiser incluir várias colunas, basta adicioná-las ao PARTITION BY
:ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)