【问题标题】:Condition to avoid duplicate insert in SQL SERVER避免在 SQL SERVER 中重复插入的条件
【发布时间】:2014-08-16 14:47:00
【问题描述】:
我需要做什么
- 如果存在重复行,请不要插入。
- 如果存在相同的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]);