Solved

NEWBIE: Any way to ignore duplicates on INSERT?

Posted on 2006-10-31
5
3,606 Views
Last Modified: 2009-10-23
Dear Experts,

I'm trying to insert records from one table into another table with the same key structure.  I'm using:

INSERT INTO...SELECT...FROM

So the entire insert takes place in a single statement.

But it fails if even a single record already exists in both tables.

Is there any way to say "If there's a duplicate, OVERWRITE the OLD with the NEW"?

If not, is there any way to say, "If there's a duplicate, ignore it"?

If not that either, what do I do?  Throw myself off a bridge?  How high?

Thanks,
BrianMc1958
 
0
Comment
Question by:BrianMc1958
5 Comments
 
LVL 9

Expert Comment

by:nito8300
ID: 17844426
create an index and ignore duplicate values.

in EM, right click the table, go to all tasks, manage indexes add new index, select your primary key and set it to ignore duplicates...
0
 
LVL 7

Accepted Solution

by:
mikkilineni earned 350 total points
ID: 17844431
INSERT INTO table 1 SELECT col1,col2 ,col3...FROM table2 where primartkeycol not in (select  primarykeycol from table1)
0
 

Author Comment

by:BrianMc1958
ID: 17844600
To nito8300:  Thanks, but I should have told you I need to do this with TSQL, programatically.

To mikkilineni:  Thanks even more.  That will basically solve my problem.  But is there any reasonably simple way to have the NEW row inserted?  I believe your solution will retain the OLD row, right?
0
 
LVL 1

Assisted Solution

by:asduth
asduth earned 150 total points
ID: 17844792
There is no very simple way to achieve this.

You have 2 basic choices - either delete the rows, then do the insert,

e.g.

delete table1 from table1 join table1 on table1.PK = table2.PK
insert into table1 select * from table2

or else, do an update of the existing rows followed by the selective insert:

update table1 set
table1.col1 = table2.col1,
table1.col2 = table2.col2
from table2 where table1.PK = table2.PK

insert into table1
select * from table2
where table2.PK not in (select PK from table1)


Most likely, the update/insert will be better performance than the delete/insert. Particularly if you have large data sets and/or you have a clustered index on the PK.

If you are doing this from many places, you could think of encapsulating it in a trigger on the table.

0
 

Author Comment

by:BrianMc1958
ID: 17844814
Thanks 1,000,000.00, folks.
--BrianMc1958
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Let's review the features of new SQL Server 2012 (Denali CTP3). It listed as below: PERCENT_RANK(): PERCENT_RANK() function will returns the percentage value of rank of the values among its group. PERCENT_RANK() function value always in be…
Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question