본문 바로가기
SQL

MSSQL MERGE (UPSERT)

by Jundol 2020. 10. 19.

POSTGRES 에서는 ON CONFLICT DO UPDATE 절로 사용하지만

MSSQL 은 MERGE 구문을 이용한다.

postgres 의 upsert

insert into CUSTOMERS (NAME, EMAIL)
values (
'Microsoft',
'hotline@microsoft.com'
) on conflict (NAME)
do update set EMAIL = EXCLUDED.EMAIL || ';' || CUSTOMERS.EMAIL;




mssql 의 merge

MERGE dbo.CUSTOMERS AS A
USING (SELECT 'Microsoft', 'hotline@microsoft.com') AS B (NAME, EMAIL)
ON A.NAME = B.NAME
WHEN MATCHED THEN
UPDATE SET EMAIL = A.EMAIL + ';' + B.EMAIL
WHEN NOT MATCHED BY TARGET THEN
INSERT (NAME, EMAIL) VALUES (B.NAME, B.EMAIL);
view raw MSSQL_Merge.sql hosted with ❤ by GitHub

동시성 처리시 SELECT , UPDATE, INSERT, DELETE 를 한개의 구문에서 처리할 수 있는 유용한 쿼리 구문이다.

NOT MATCHED 에서 UPDATE, DELETE 를 수행하고자한다면 WHEN NOT MATCHED BY SOURCE THEN 으로 수정해 작업한다.


댓글