편리한 MERGE문 활용
SQL Server 2008 부터 지원되는 MERGE문은 조건에 따라 INSERT, UPDATE ,DELETE등을 한 문장으로
간단히 실행할 수 있는 편리한 TSQL 문장이다. MERGE가 없는 이전 버전의 경우 보통 IF문 등으로 조건을 먼저 체크하고
DML 문장(INSERT, UPDATE ,DELETE)을 각각 나눠서 여러 문장으로 기술해야 했다.
MERGE문은 먼저 TARGET과 SORUCE를 지정하는데, TARGET은 DML을 실제 수행하는 대상 테이블이고, SOURCE는
TARGET과 비교하여 새로 추가하거나 갱신할 데이타를 가진 테이블이다. 아래 예제에서 보듯이 MERGE문 다음에 TARGET이 되는 테이블을
지정하고, USING 다음에 소스를 지정한다. 소스는 테이블이나 임시테이블, 리터럴값, 혹은 변수가 될 수도 있다.
ON 키워드 다음에는 타겟과 소스가 매치되는 조건식을 지정한다. 아래 예의 경우는 이름이 같은 경우 MATCH 되는 것으로 본다.
다음 WHEN MATCHED 혹은 WHEN NOT MATCHED는 말 그대로 ROW가 매치된 경우와 그렇지 않은 경우 각각 다음 문장을 실행할 것을 지정한다.
아래 예의 경우는 이름이 매치되는 경우 Email을 UPDATE하고 타겟에 매칭되는 이름이 없는 경우 새 레코드를 INSERT하게 된다.
리터럴 값으로 MERGE
MERGE문의 TARGET은 테이블을 지정하지만, USING 다음에 지정하는 소스는 테이블이나 리터럴값이 될 수 있다.
리터럴값은 하나 이상을 지정할 수 있는데, 하나인 경우 VALUES (리터럴값) 과 같이 지정하며,
복수 리터럴인 경우 VALUES (리터럴값), (리터럴값), ... 과 같이 지정한다.
아래 예제는 2개의 리터럴을 갖는 예로서 id가 1, 2 인 Row에 대해
이미 있는 경우 UPDATE를, 없는 경우 INSERT를 하는 MERGE 문장이다.
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.