这个SQL查询出了什么问题?

She*_*ell 0 sql sql-server

我有两个表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和主键列上创建CompanyIDBankID.它是一个复合键.

Aft*_*med 5

不,您不能使用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)