【问题标题】:Condition to avoid duplicate insert in SQL SERVER避免在 SQL SERVER 中重复插入的条件
【发布时间】:2014-08-16 14:47:00
【问题描述】:

我需要做什么

  1. 如果存在重复行,请不要插入。
  2. 如果存在相同的party_num 但其他列的值不同,请更新该party num 的其他列的现有值。

由于源表和目标表有超过 50 万条记录,最好的方法是什么?

 INSERT INTO STAGING_CUST_ACCT

        SELECT 
            [CUSTOMER KEY]      AS [PARTY_NUM]
            ,[ACCOUNT CITY]             AS [PRIMARY CITY]
            ,[ACCOUNT STATE]            AS [PRIMARY STATE]
            ,[ACCOUNT ZIP]              AS [PRIMARY ZIP]
        FROM [RCC_CLOSED]  

【问题讨论】:

    标签: sql sql-server insert merge duplicates


    【解决方案1】:
    ;
    WITH changed_rows_only AS (
        SELECT [CUSTOMER KEY],[ACCOUNT CITY],[ACCOUNT STATE],[ACCOUNT ZIP] FROM RCC_CLOSED
        EXCEPT
        SELECT [PARTY_NUM]   ,[PRIMARY CITY],[PRIMARY STATE],[PRIMARY ZIP] FROM STAGING_CUST_ACCT
    )
    MERGE INTO STAGING_CUST_ACCT AS tgt
    USING changed_rows_only AS src
    ON (
      src.[CUSTOMER KEY] = tgt.[CUSTOMER KEY]
    )
    WHEN MATCHED THEN UPDATE SET
      tgt.[PRIMARY CITY]  = src.[ACCOUNT STATE]
     ,tgt.[PRIMARY STATE] = src.[ACCOUNT STATE]
     ,tgt.[PRIMARY ZIP]   = src.[ACCOUNT ZIP]
    WHEN NOT MATCHED THEN
      INSERT(    [PARTY_NUM]   ,    [PRIMARY CITY],    [PRIMARY STATE],    [PRIMARY ZIP])
      VALUES(src.[CUSTOMER KEY],src.[ACCOUNT CITY],src.[ACCOUNT STATE],src.[ACCOUNT ZIP]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多