본문 바로가기

프로그래밍/MSSQL

[MSSQL] NOT MATCHED BY SOURCE ('DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.)

반응형

 

 

 

 

MERGE

 

[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리

 

[MSSQL] MERGE를 사용하여 데이터 입력/수정/삭제를 한 번에 처리

데이터 입력/수정/삭제를 한 번에 처리할 수 있는 MERGE에 대해 알아보자 MERGE 단일 문에서 여러 DML(INSERT, UPDATE, DELETE) 작업을 수행할 수 있다. 즉, 여러 개의 개별 DML문을 단일 문으로 대체할 수 있다...

ggmouse.tistory.com

 

 

 

MERGE 구문 수행 도중 다음과 같은 오류가 발생했다. 이를 해결해보자!

 

 

메시지 10710, 수준 15, 상태 1, 줄 5
'DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.

'UPDATE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.

 

메시지 10710, 수준 15, 상태 1, 줄 5
An action of type 'DELETE' is not allowed in the 'when not matched' clause of a MERGE statement.

An action of type 'UPDATE' is not allowed in the 'when not matched' clause of a MERGE statement.

 

 

 

 

먼저 MERGE 구문에 대해 간단히 살펴보면, 다음과 같다.

 

MERGE 타겟테이블명 AS A
	USING 기준테이블명 AS B ON A.컬럼명 = B.컬럼명
	WHEN MATCHED THEN 일치할때쿼리문
	WHEN NOT MATCHED THEN 불일치할때쿼리문;

 

 

그리고 위의 오류 메시지가 반환된 MERGE 문은 다음과 같다.

 

MERGE TARGET_TABLE AS A
	USING SOURCE_TABLE AS B ON A.ID = B.ID
	WHEN NOT MATCHED THEN UPDATE SET C_STATE = 'DEL';
	--WHEN NOT MATCHED THEN DELETE;

 

 

기준 테이블과 타겟 테이블의 데이터가 불일치할 경우 (NOT MATCHED)에서

 

UPDATE/DELETE 구문을 사용하기 위해서는 NOT MATCHED BY SOURCE를 사용하면 된다.

 

 

 

 

NOT MATCHED BY SOURCE/TARGET

 

1. NOT MATCHED BY SOURCE

: 타겟 테이블에는 해당 데이터가 있지만, 기준 테이블에 없는 경우

 

> 타겟 테이블의 특정 rows를 DELETE 할 수 있다.

 

> 타겟 테이블의 특정 rows를 UPDATE 할 수 있다.

 

 

2. NOT MATCHED BY TARGET (=NOT MATCHED)

: 기준 테이블에는 해당 데이터가 있지만, 타겟 테이블에는 없는 경우

 

> 타겟 테이블에 새로운 rows를 INSERT 할 수 있다.

 

 

 

 

NOT MATCHED BY SOURCE를 적용하여, 수정된 정상 쿼리

 

MERGE TARGET_TABLE AS A
	USING SOURCE_TABLE AS B ON A.ID = B.ID
	WHEN NOT MATCHED BY SOURCE THEN UPDATE SET C_STATE = 'DEL';
	--WHEN NOT MATCHED BY SOURCE THEN DELETE;

 

 

 

 

+ 추가사항

 

NOT MATCHED BY SOURCE 외의 추가 조건이 필요할 경우 다음과 같이 적용

 

MERGE TARGET_TABLE AS A
	USING SOURCE_TABLE AS B ON A.ID = B.ID
	WHEN NOT MATCHED BY SOURCE AND A.ID = 3 THEN DELETE;

 

 

 

 

 

반응형