Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3623
  • Last Modified:

NEWBIE: Any way to ignore duplicates on INSERT?

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
BrianMc1958
Asked:
BrianMc1958
2 Solutions
 
nito8300Commented:
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
 
mikkilineniCommented:
INSERT INTO table 1 SELECT col1,col2 ,col3...FROM table2 where primartkeycol not in (select  primarykeycol from table1)
0
 
BrianMc1958Author Commented:
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
 
asduthCommented:
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
 
BrianMc1958Author Commented:
Thanks 1,000,000.00, folks.
--BrianMc1958
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now