본문 바로가기
trouble shooting/MS-SQL

[MS-SQL] Merge 문 사용 간 에러 조치 - The MERGE statement attempted to UPDATE or DELETE the same row more than once

by 김학준0724 2022. 9. 26.

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 수행하나, 조건으로 조회된 기존 데이터 값이 중복일 때 에러 발생

 

 

테이블 A
테이블 B

 

-- 중복 에러 쿼리문
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)

 

Merge 문 정상 실행된 A 테이블

 

4. 참조


https://www.mssqltips.com/sqlservertip/3677/resolving-the-merge-statement-attempted-to-update-or-delete-the-same-row-more-than-once-error/