본문 바로가기
데이터베이스/MSSQL

MSSQL MERGE 쿼리 활용하기.

by Dokon Jang 2017. 6. 19.
반응형

MSSQL 데이터베이스에 특정 Rows를 Update 하거나 Insert를 쉽게 하는 방법으로 MERGE 사용합니다.

아래의 TB_USER 테이블에 ID가 'aaa'이고, Name이 'Name#1' 데이터를 넣고자 하는데,

동일 아이디가 있으면 UPDATE하고, 없으면 INSERT를 하려고 한다.

 

프로그램에서 구현하려면 INSERT 쿼리를 수행해서 오류(PK 중복 Exception)가 발생하면 UPDATE를 해야 한다.

C# 또는 Java로 프로그래밍하면 try catch를 이용 할 수 있다.

try
{
    // Insert 쿼리 수행
    // PK로 인해 Exception이 발생
}
catch
{
    // Insert 쿼리 수행
}
 
 
하지만 아래와 같이 MERGE 쿼리를 수행하면 더욱 쉽게 구현이 가능하다.
쿼리를 수행하면 Insert/Update/Delete 결과도 쉽게 확인 할 수 있다.
MERGE TB_USER AS T
USING
(
    SELECT 'aaa' AS ID, 'Name#1' AS NAME
    UNION ALL
    SELECT 'bbb' AS ID, 'Name#2' AS NAME
) AS S
ON (T.ID = S.ID)
WHEN MATCHED THEN
    UPDATE SET T.ID = S.ID,
               T.NAME = S.NAME
WHEN NOT MATCHED THEN
    INSERT (ID, NAME)
    VALUES (S.ID, S.NAME)
OUTPUT $action, Inserted.*;
 

 

[쿼리 결과]

위의 쿼리를 수행하면 아래와 같이 결과가 표시된다.

 

반응형

댓글