Programming

📤 MERGE 문으로 MSSQL에서 UPSERT 처리하는 방법 완벽 정리

quantoasis 2025. 3. 22. 16:16
반응형

MSSQL에서 데이터를 넣을 때,
이미 있으면 UPDATE, 없으면 INSERT 하고 싶을 때가 많습니다.
이럴 때 유용한 기능이 바로 MERGE 문입니다. ✅

이번 포스팅에서는 MERGE 문을 활용해서 UPSERT (Insert + Update) 처리하는 방법을 정리해볼게요.


🎯 MERGE 문이란?

MERGE 문은 소스(Source) 테이블과 대상(Target) 테이블을 비교해서 다음 3가지 작업을 자동으로 처리해주는 문법입니다:

  • 대상에 없으면 INSERT
  • 대상에 이미 있으면 UPDATE
  • 필요하면 조건에 따라 DELETE도 가능

📌 즉, 조건에 따라 INSERT / UPDATE / DELETE를 한 번에 처리할 수 있는 강력한 SQL 구문입니다.


🧪 MERGE 기본 구조

MERGE INTO TargetTable AS T
USING SourceTable AS S
ON T.key = S.key
WHEN MATCHED THEN
    UPDATE SET T.col1 = S.col1, T.col2 = S.col2
WHEN NOT MATCHED THEN
    INSERT (col1, col2, col3)
    VALUES (S.col1, S.col2, S.col3);
  • MATCHED: ON 조건이 맞는 경우 → UPDATE
  • NOT MATCHED: ON 조건이 안 맞는 경우 → INSERT

🛠 실전 예제: 고객 테이블 UPSERT

1. 대상 테이블 (Customers)

CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    Name VARCHAR(100),
    Email VARCHAR(100)
);

2. 소스 테이블 (신규 데이터)

CREATE TABLE NewCustomers (
    CustomerID INT,
    Name VARCHAR(100),
    Email VARCHAR(100)
);

3. MERGE 실행

MERGE INTO Customers AS T
USING NewCustomers AS S
ON T.CustomerID = S.CustomerID
WHEN MATCHED THEN
    UPDATE SET 
        T.Name = S.Name,
        T.Email = S.Email
WHEN NOT MATCHED THEN
    INSERT (CustomerID, Name, Email)
    VALUES (S.CustomerID, S.Name, S.Email);

✅ 이렇게 하면 기존 고객은 정보가 갱신(Update) 되고,
신규 고객은 추가(Insert) 됩니다.


🔐 주의할 점

  • MERGE대상 테이블에 Primary Key 또는 UNIQUE 제약 조건이 있어야 정확히 동작합니다.
  • WHEN MATCHED중복 조건을 만나면 에러가 날 수 있으므로 ON 조건을 유일하게 설정해야 합니다.
  • 트리거가 있는 테이블에서 MERGE는 예상치 못한 동작을 할 수 있으니 주의!

💡 MERGE 문 + DELETE 예제

MERGE INTO Customers AS T
USING NewCustomers AS S
ON T.CustomerID = S.CustomerID
WHEN MATCHED AND S.Name IS NULL THEN
    DELETE
WHEN MATCHED THEN
    UPDATE SET T.Name = S.Name, T.Email = S.Email
WHEN NOT MATCHED THEN
    INSERT (CustomerID, Name, Email)
    VALUES (S.CustomerID, S.Name, S.Email);

✅ 조건에 따라 삭제도 함께 처리할 수 있어요!


🧾 요약

상황 처리 방식 문법
데이터가 있음 UPDATE WHEN MATCHED
데이터가 없음 INSERT WHEN NOT MATCHED
조건 충족 시 삭제 DELETE WHEN MATCHED AND 조건 THEN DELETE

🎯 마무리

MERGE 문은 MSSQL에서 데이터 동기화, 변경 추적, UPSERT 처리에 정말 유용한 기능입니다.
복잡한 IF EXISTS ... THEN UPDATE ELSE INSERT 구문보다 훨씬 간결하고 효율적이에요.

🔥 실무 자동화 쿼리에 적극 활용해보세요!


반응형