I have wrote following two articles for Duplicate Rows Management in SQL Server. One shows how to count duplicate records and the other how to delete duplicate records.

SQL SERVER – Count Duplicate Records – Rows
SQL SERVER – Delete Duplicate Records – Rows
What to Check Before You Delete Duplicate Records
The first question is always the same: what makes two rows duplicates? Sometimes every column matches. More often, only a few business columns match, such as a customer email or an order number, while an identity column or a timestamp is different. Write that rule down before you touch the data, because the rest of the work depends on it.
Once the rule is clear, the steps are simple:
- Count first. A
GROUP BYon the columns that define a duplicate, withHAVING COUNT(*) > 1, shows you how many groups you have and how big they are. - Decide which row to keep, for example the oldest or the newest one.
- On SQL Server 2005 and later,
ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)inside a CTE numbers the rows in each group. Every row with a number greater than 1 is an extra copy, and you can delete from the CTE directly. - Run the delete inside a transaction on a test copy first, and compare the row counts before and after.
Check for foreign keys too. If child rows point to a copy you plan to remove, move them to the row you keep first. Otherwise the delete fails, or with cascading keys it quietly takes the child rows with it.
Take a backup before you run it on production. A delete is quick to write and slow to undo, and a wrong PARTITION BY list can remove rows that were not duplicates at all.
Finally, stop the problem from coming back. Once the table is clean, add a unique constraint or a unique index on the columns that define a duplicate. Then SQL Server rejects the next duplicate at insert time, and you will not need to clean the table again. If you cannot add a constraint, find the process that inserts twice. It is often a retry or an import that runs more than once.
Published by Pinal Dave on SQLAuthority. More of my work at pinaldave.com.
Discover more from SQL Authority with Pinal Dave
Subscribe to get the latest posts sent to your email.


3 Comments. Leave new
hi
please tell me that is their any unique identifier with which each row in a table is identified like rownum in oracle
Hi Pinal,
Is there any query to duplicate records when we does not have any identity in the table.
Thanks
Shyam
Dear sir
i want to delete the duplicate row in table but we have no any primery key in table how it is . pl do this
from
krishna
noida