Вы можете использовать CTE (Common Table Expression) в SQL Server 2005 и выше, чтобы достичь этого - вы в основном «делите» свои данные на ID
, поэтому каждая группа идентичных значений является разделом, а затем вы нумеруетете, которые последовательно используют ROW_NUMBER()
.Любые значения ROW_NUMBER()
больше 1 указывают на дубликат.
;WITH Duplicates AS
(
SELECT
DetailID, FKey, Col1, Col2, Col3, Col4,
ROW_NUMBER() OVER (PARTITION BY DetailID ORDER BY FKey) AS 'RowNum'
FROM dbo.YourTable
)
SELECT
DetailID, FKey, Col1, Col2, Col3, Col4, RowNum
FROM Duplicates
WHERE RowNum > 1
Это создаст список дубликатов для вас - теперь вы можете либо обновить их, либо удалить их, либо все, что вы хотите сделать сим.