보인다 당신이 행복 에서 당신의 목표 테이블에 적재되는 이전부터 실행됩니다.
참고:일치에서 병합을 고려하지 않는 행 삽입어(중복)실행하는 동안 병합 자체입니다.
아래에 나의 재현 예 샘플 데이터:
Table1:초기 데이터
Table2:Taget 테이블
Merge:
MERGE tb2 AS Target
USING tb1 AS Source
ON Source.firstname = Target.firstname and
Source.lastname = Target.lastname
-- For Inserts
WHEN NOT MATCHED BY Target THEN
INSERT (firstname, lastname, updated_date)
VALUES (Source.firstname, Source.lastname, source.updated_date)
-- For Updates
WHEN MATCHED THEN UPDATE SET
Target.updated_date = Source.updated_date
-- For Deletes
WHEN NOT MATCHED BY Source THEN
DELETE;
을 때 병합이 실행될 때,그것은 삽입없이 모든 데이터 어떤 오류가 있습니다.
새로운 데이터에 tb1:
을 실행할 때 Merge,그것은 나에게 같은 오류로 당신입니다.
문제 해결 방법으로 중 하나를 사용하여 아래 옵션
추가 조건은 가능한 경우에 절을 고유하게 식별하는 데이터입니다.
중복을 제거 에서 원본과 데이터를 병합으로서 tb2 아래와 같습니다.
--temp table
drop table if exists #tb1;
select * into #tb1 from (
select *, row_number() over(partition by firstname, lastname order by firstname, lastname, updated_date desc) as rn from tb1) a
where rn = 1
MERGE tb2 AS Target
USING #tb1 AS Source
ON Source.firstname = Target.firstname and
Source.lastname = Target.lastname
-- For Inserts
WHEN NOT MATCHED BY Target THEN
INSERT (firstname, lastname, updated_date)
VALUES (Source.firstname, Source.lastname, source.updated_date)
-- For Updates
WHEN MATCHED THEN UPDATE SET
Target.updated_date = Source.updated_date
-- For Deletes
WHEN NOT MATCHED BY Source THEN
DELETE;
데이터 병합으로서 tb2 성공하였습니다.