Solved

NEWBIE: Any way to ignore duplicates on INSERT?

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

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

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

Suggested Solutions

Everyone has problem when going to load data into Data warehouse (EDW). They all need to confirm that data quality is good but they don't no how to proceed. Microsoft has provided new task within SSIS 2008 called "Data Profiler Task". It solve th…
Ever wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includ…
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
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.

770 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