我有两张表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 )
我正在使用SQL Server 2005,并且在列CompanyID
和BankID
上创建了主键。它是一个复合键。
答案 0 :(得分:5)
不,你不能使用NOT IN,但是你可以使用NOT EXISTS,你正在使用复合键,你需要确保从#tmp_BankMaster中选择那些你的复合键(BankID和CompanyID不是存在于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 )
或
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
)
这也应该有效:
INSERT INTO BankMaster
SELECT *
FROM #tmp_BankMaster
EXCEPT
SELECT *
FROM BankMaster
答案 1 :(得分:0)
您需要检查要插入BankMaster的值。看起来好像是在尝试插入表中已存在的CompanyID和BankID的组合。
答案 2 :(得分:0)
n内在的地方放在“上”
Select * From #tmp_BankMaster t inner join BankMaster s
on t.CompanyID=s.CompanyID and t.BankID NOT IN (Select BankID From BankMaster )
答案 3 :(得分:0)
要获得所需的独特记录是这样的
INSERT INTO BankMaster
SELECT *
FROM #tmp_BankMaster
WHERE
BankID NOT IN (SELECT BankID FROM BankMaster
WHERE BankMaster.BankID = #tmp_BankMaster.BankID )
AND
CompanyId NOT IN ( SELECT BankID FROM BankMaster
WHERE BankMaster.CompanyID = #tmp_BankMaster.CompanyID )
但这又有性能问题。所以考虑使用Aftab Ahmed。