Solved

NEWBIE: Any way to ignore duplicates on INSERT?

Posted on 2006-10-31
5
3,594 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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Introduction SQL Server Integration Services can read XML files, that’s known by every BI developer.  (If you didn’t, don’t worry, I’m aiming this article at newcomers as well.) But how far can you go?  When does the XML Source component become …
Introduction In my previous article (http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/SSIS/A_9150-Loading-XML-Using-SSIS.html) I showed you how the XML Source component can be used to load XML files into a SQL Server database, us…
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how the fundamental information of how to create a table.

706 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now