--STEP 1: Find Repetitive Records (Only the Active Ones)
SELECT INDEX1, INDEX2
INTO #TEMP_TABLE
FROM MY_TABLE
WHERE ACTIVE = 1
GROUP BY INDEX1, INDEX2
HAVING COUNT(1) > 1
ORDER BY COUNT(1) DESC
--STEP 2: Create the Cursor
DECLARE @INDEX1 INT
DECLARE @INDEX2 INT
DECLARE @ID INT
DECLARE MY_CURSOR CURSOR FOR
SELECT INDEX1, INDEX2 FROM #TEMP_TABLE
OPEN MY_CURSOR
--Be careful about the order of indexes
FETCH NEXT FROM MY_CURSOR INTO @INDEX1, @INDEX2
WHILE @@FETCH_STATUS = 0
BEGIN
--STEP 3: Choose an active record from the repetitive ones
SELECT TOP(1) @ID = ID FROM MY_TABLE
WHERE INDEX1 = @INDEX1 AND INDEX2 = @INDEX2 AND ACTIVE = 1
--STEP 4: Instead of deleting a record, I always choose to update it as Inactive
UPDATE MY_TABLE
SET ACTIVE = 0
WHERE INDEX1 = @INDEX1 AND INDEX2 = @INDEX2 AND ID != @ID
PRINT 'The repetitive records have been deleted.'
FETCH NEXT FROM MY_CURSOR INTO @INDEX1, @INDEX2
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
DROP TABLE #TEMP_TABLE
