我有两个表BankMaster和#tmp_BankMaster.该#tmp_BankMaster表继承自BankMaster表.因此,数据结构是相同的.甚至#tmp_BankMaster表中也存在一些数据是一样的BankMaster.现在,我想从插入所有不存在的数据#tmp_BankMaster进入BankMaster.我创建了一个查询.但是,不知道它如何给出错误主键约束:"无法插入重复键".
INSERT INTO BankMaster
SELECT *
FROM #tmp_BankMaster
WHERE
BankID NOT IN (SELECT BankID FROM BankMaster
WHERE BankMaster.BankID = #tmp_BankMaster.BankID
AND BankMaster.CompanyID = #tmp_BankMaster.CompanyID )
Run Code Online (Sandbox Code Playgroud)
我使用SQL Server 2005和主键列上创建CompanyID和BankID.它是一个复合键.
不,您不能使用NOT IN,但您可以使用NOT EXISTS,您正在使用复合密钥,您需要确保从#tmp_BankMaster中选择那些记录,您的复合密钥(BankID和BankID不存在于BankMaster中) ).试试这个
insert into BankMaster
Select * From #tmp_BankMaster tmp
where not exists (select 1 from BankMaster
master where master.BankID= tmp.BankID
and master.CompanyID = tmp.CompanyID )
Run Code Online (Sandbox Code Playgroud)
要么
insert into BankMaster
SELECT *
FROM #tmp_BankMaster
WHERE NOT EXISTS
(SELECT *
FROM #tmp_BankMaster
WHERE BankMaster.BankID= #tmp_BankMaster.BankID
AND BankMaster.CompanyID = #tmp_BankMaster.CompanyID
)
Run Code Online (Sandbox Code Playgroud)
这应该也有效:
INSERT INTO BankMaster
SELECT *
FROM #tmp_BankMaster
EXCEPT
SELECT *
FROM BankMaster
Run Code Online (Sandbox Code Playgroud)