본문 바로가기

DBMS/SQL Server

[SQL Server] MERGE 문

 

SQL Server 2008에서 제공하는 MERGE 문은 하나의 쿼리 문으로 INSERT, UPDATE, DELETE 작업을 할 수 있다.

일반적으로 두 개의 테이블을 비교해서 한쪽 테이블에 없으면 INSERT, 있으면 UPDATE하는 형태로 많이 사용한다.

MERGE 문은 UPDATE + INSERT의 의미로 UPSERT라고 부르기도 한다.

 

 USE TestDB

 GO

 

 -- 테스트를 위해 테이블 생성

 CREATE TABLE dbo.TestTbl (

    COL1 INT IDENTITY(1,1) NOT NULL

  , COL2 INT NOT NULL

  , COL3 CHAR(6)

 )

 GO

 

 -- 데이터 삽입

 INSERT INTO dbo.TestTbl (COL2, COL3)

 VALUES (1, '한효주'), (2, '아이유'), (3, '배수지')

 GO

 

 -- 데이터 확인

 SELECT * FROM dbo.TestTbl

 GO

 

 

 -- COL2 = 2인 행이 있으면 COL3'강민경'으로 UPDATE, 없으면 INSERT

 MERGE dbo.TestTbl AS T

     USING (SELECT 2, '강민경') AS S (COL2, COL3)

     ON T.COL2 = S.COL2

     WHEN MATCHED THEN

           UPDATE SET COL3 = S.COL3

     WHEN NOT MATCHED BY TARGET THEN

           INSERT (COL2, COL3) VALUES (S.COL2, S.COL3);

 GO

 

 -- 데이터 확인

 SELECT * FROM dbo.TestTbl

 GO

 

 

 -- COL2 = 4인 행이 있으면 COL3'유인나'UPDATE, 없으면 INSERT

 MERGE dbo.TestTbl AS T

     USING (SELECT 4, '유인나') AS S (COL2, COL3)

     ON T.COL2 = S.COL2

     WHEN MATCHED THEN

           UPDATE SET COL3 = S.COL3

     WHEN NOT MATCHED BY TARGET THEN

           INSERT (COL2, COL3) VALUES (S.COL2, S.COL3);

 GO

 

 -- 데이터 확인

 SELECT * FROM dbo.TestTbl

 GO

 

 

※ MERGE 문은 세미콜론(;)으로 종료해야 한다.