MS-SQL에서 흔히 사용하는 Merge 문 사용 간 발생할 수 있는 에러를 정리하려고 합니다.
해결방법이 매우 간단하므로 아래의 예제를 따라 보시면 이해 되실거에요
1. Merge 문이란?
A, B 테이블 비교 결과에 따라 Insert, Update, Delete 작업을 한번에 수행하는 문법
2. Merge 문 작성법
MERGE 변경될테이블명 AS A
USING 기준테이블명 AS B
ON A.컬럼명 = B.컬럼명
WHEN MATCHED THEN
일치할때 구문
WHEN NOT MATCHED THEN
불일치할때 구문
3. 에러 해결방법
에러코드 : The MERGE statement attempted to UPDATE or DELETE the same row more than once
발생원인 : MATCHED 경우 기존 데이터를 Update 수행하나, 조건으로 조회된 기존 데이터 값이 중복일 때 에러 발생


-- 중복 에러 쿼리문
MERGE A AS A
USING B AS B
ON A.id = B.id
WHEN MATCHED THEN
UPDATE SET A.name = B.name
WHEN NOT MATCHED THEN
INSERT (id, id2 , name) VALUES (B.id, B.id2, B.name)
--해결 쿼리문 : ON 조건에 검색 결과가 1=1로 수행될 수 있게 조건 추가함
MERGE A AS A
USING B AS B
ON A.id = B.id
AND A.id2 = B.id2
WHEN MATCHED THEN
UPDATE SET A.name = B.name
WHEN NOT MATCHED THEN
INSERT (id, id2 , name) VALUES (B.id, B.id2, B.name)
