如何将一个表内容复制到另一个,当我不知道列集时忽略PK重复

时间:2012-09-19 13:18:03

标签: sql tsql

我有2个数据库:SRC和DST。每个数据库中的每个数据库都包含表格数据,每个数据库中的数据列数相等,但用户不知道(我不知道PK的名称,甚至是PK身份或单身)。

我已经有了以下脚本:

insert into DST.dbo.DATA select * from SRC.dbo.DATA

但是如果DST.DATA包含具有相同PK的行,则会抛出错误(我正在使用C#)。这就是为什么我想使用像

这样的东西
on duplicate ignore

来自mysql

请问我建议脚本将SRC.dbo.DATA中的行复制到DST.dbo.DATA,忽略主键约束。如果可能的话,外国的约束也是

抱歉英语不好

2 个答案:

答案 0 :(得分:1)

您可以尝试类似

的内容
insert into DST.dbo.DATA 
select  s.* 
from    SRC.dbo.DATA s LEFT JOIN
        DST.dbo.DATA  d ON  s.Keys1 = d.Keys1
                        AND s.Keys2 = d.Keys2
                        ...
                        AND s.KeysN = d.KeysN
WHERE   d.Keys1 IS NULL

这应该允许您只插入Source中的值,而不是Destination。

答案 1 :(得分:0)

你可以尝试这样的事情,不要从SRC中存在的DST中选择。

insert into DST.dbo.DATA select * from SRC.dbo.DATA 
WHERE SRC.dbo.DATA.PKColumn NOT IN(SELECT PKColumn FROM DST.dbo.DATA)