Харесвам CTE и ROW_NUMBER тъй като двете комбинирани ни позволяват да видим кои редове са изтрити (или актуализирани), следователно просто променете DELETE FROM CTE... към 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
ДЕМО (резултатът е различен; предполагам, че се дължи на правописна грешка от ваша страна)
COL1 COL2 COL3 COL4 COL5 COL6 COL7
john 1 1 1 1 1 1
sally 2 2 2 2 2 2
Този пример определя дубликати по една колона col1 поради PARTITION BY col1 . Ако искате да включите няколко колони, просто ги добавете към PARTITION BY :
ROW_NUMBER()OVER(PARTITION BY Col1, Col2, ... ORDER BY OrderColumn)