• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1183
  • Last Modified:

Does MS SQL Server store an Internal ID for each row

We have a table in which a backup was imported twice and as a result each row is there twice. So there is no way to uniquely identify each row because they duplicates have identical everything including the IDENTITY field

Does MS SQL Server make a value available that tells us which row is more recent, some internal row ID?

0
moonrise
Asked:
moonrise
  • 5
  • 3
  • 3
  • +1
1 Solution
 
arbertCommented:
Nope.  Do you just want to delete a duplicate?
0
 
arbertCommented:
Is the recovery mode on your database set to full?  If so, you could also backup the log and then do a point in time restore before the import was done the second time.
0
 
moonriseAuthor Commented:
Yes, I just want to delete duplicates, but duplicates are identical

We cannot restore because more live data is being created every second
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
arbertCommented:
acperkins had a good solution on this post--it's actually much easier since you have an identity on the table:

http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/Q_20381662.html


you might want to consider adding a unique index or primary key to avoid this in the future.

Brett
0
 
moonriseAuthor Commented:
The solution mentionned assumes that the duplicates have different values for at least one field, in that case record_id. In my situation we don't have any field different.
0
 
arbertCommented:
Yes, didn't you say there was an identity field on each record?  That's your different value....
0
 
arbertCommented:
Ahhhh, unless you used SET IDENTITY_INSERT and inserted duplicate Idents?
0
 
kssaranCommented:
Hi Moonrise,

Try something using property called ROWGUIDCOL(Globally Unique Identifiers)  & see if you can get some result of what u wanted

Rgds
Sara
0
 
danblakeCommented:
Moonrise,

You're going to need a seperate table, like this:
http://support.microsoft.com/default.aspx?scid=kb;en-us;70956

Or alternativly create the second seperate table and a covering index (with ignore dups option on) then populate the table with your rows and truncate the original table, copying from the second table to the first.
http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/Q_20956727.html
(There's a reason why this question is still open..)
(This is a better way of achieving what you want than the KB article from MS)

This should remove the dups quickly.

Rgds,

Dan.
0
 
danblakeCommented:
or not even a truncate -- you could run a delete where rows exist in the second table only, and then enable an indentity insert on again to ensure you can still populate to your live table... But it does depend on how many rows we are dealing with here as to the best mechanism for attack....

Alternativly you can write a procedure to trap the error code returned from ignore dups, and delete the highest occuring duplicate (with a copy in a second table) from the first then populate this record back into the original table.

There are many ways of deleting these dups.
0
 
moonriseAuthor Commented:
thank you
0
 
danblakeCommented:
No worries moonrise, glad to help.
0

Featured Post

Become an Android App Developer

Ready to kick start your career in 2018? Learn how to build an Android app in January’s Course of the Month and open the door to new opportunities.

  • 5
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now