主键违规约束

C J*_*C J 5 sql sql-server asp.net ado.net

string sqlInsert = "Insert into account_details(
     account_number,
     account_type,
     transfer_access_code,
     account_balance,
     customer_id) 
SELECT 
     account_number,
     account_type,
     transfer_access_code,
     account_balance,
     customer_id 
from customer_details";
Run Code Online (Sandbox Code Playgroud)

此查询仅从客户详细信息(table1)中获取数据,并将其插入到其他table2中(account_details)

当第一次触发此查询时,它可以正常工作

但是当第二次触发时它显示错误违反PRIMARY KEY约束'PK_account_details'.无法在对象'dbo.account_details'中插入重复键.

任何想法跳过(account_details)table1中的现有数据并在下一行中插入新数据

Lie*_*ers 5

使用a LEFT JOIN允许您排除account details表中已存在的所有行.替代方案(可能更快)是使用a NOT EXISTS.

用一个 LEFT JOIN

INSERT INTO account_details (
    account_number
    , account_type
    , transfer_access_code
    , account_balance
    , customer_id) 
SELECT  account_number
        , account_type
        , transfer_access_code
        , account_balance
        , customer_id 
FROM    customer_details cd
        LEFT OUTER JOIN account_details ad ON ad.Account_number = cd.account_number
WHERE   ad.account_number IS NULL        
Run Code Online (Sandbox Code Playgroud)

用一个 NOT EXISTS

INSERT INTO account_details (
    account_number
    , account_type
    , transfer_access_code
    , account_balance
    , customer_id) 
SELECT  account_number
        , account_type
        , transfer_access_code
        , account_balance
        , customer_id 
FROM    customer_details cd
WHERE   NOT EXISTS (
          SELECT   * 
          FROM     account_details 
          WHERE    account_number = cd.account_number)
Run Code Online (Sandbox Code Playgroud)