MSSQL MERGE 테이블에 있으면 업데이트 없으면 추가 하기

SQL Server에서 MERGE를 사용하여 테이블 데이터를 업데이트(UPDATE) 또는 추가(INSERT)하는 방법을 보겠습니다.

우선 MERGE를 사용 하는 이유로 여러가지가 있지만 보관용 테이블에 최신 데이터로 갱신해야 하는 경우가 많습니다.

보관용 테이블에 데이터가 존재하는 경우에는 최신 데이터로 업데이트를 해줘야 하고, 존재하지 않는 데이터의 경우에는 추가를 해줘야 합니다.

쿼리로도 작성할 수 있지만 MERGE를 사용해서도 UPDATEINSERT를 간단하게할 수 있습니다.

 

MERGE 사용 방법

--base_table를 기준으로 target_table을 비교하여 갱신
MERGE INTO target_table AS a
USING (SELECT columnA,
              columnB,
              columnC from base_table) AS b 

-- 비교할 조건을 작성
ON (a.columnA = b.columnA)

--데이터가 존재 하는 경우 업데이트(UPDATE)
WHEN MATCHED THEN
UPDATE SET columnA = b.columnA,
           columnB = b.columnB,
           columnC = b.columnC

--데이터가 존재하지 않는 경우 추가(INSERT)
WHEN NOT MATCHED THEN
INSERT (columnA,
        columnB,
        columnC)
VALUES (b.columnA,
        b.columnB,
	b.columnC)

 

MERGE 결과 확인하기

MERGE 를 사용하는 경우 업데이트가 됬는지 추가가 되었는지 알고싶은 경우에는 $action을 사용하여 결과를 확인 할 수 있습니다.

--base_table를 기준으로 target_table을 비교하여 갱신
MERGE INTO target_table AS a
USING (SELECT columnA,
              columnB,
              columnC from base_table) AS b 

-- 비교할 조건을 작성
ON (a.columnA = b.columnA)

--데이터가 존재 하는 경우 업데이트(UPDATE)
WHEN MATCHED THEN
UPDATE SET columnA = b.columnA,
           columnB = b.columnB,
           columnC = b.columnC

--데이터가 존재하지 않는 경우 추가(INSERT)
WHEN NOT MATCHED THEN
INSERT (columnA,
        columnB,
        columnC)
VALUES (b.columnA,
        b.columnB,
        b.columnC)

-- nvarchar(10) 'INSERT' 또는'UPDATE' 또는 'DELETE'가 반환
OUTPUT
$action AS RESULT_STRING 

 

MERGE를 사용해 테이블에 값이 있으면 갱신, 값이 없으면 등록하는 방법을 알아봤습니다.

댓글