Поделиться через


[T-SQL] SQL Server 2008 : Merge를 이용해보자!

SQL Server 2008에서는 “Merge” 라는 새로운 T-SQL Statement가 추가되었습니다.
“Merge”를 이용하면 Source 테이블과 Target 테이블을 동기화 하는 등의 시나리오에 있어서 기존의 INSERT/UPDATE/DELETE를 각각 수행하는 3-Step T-SQL보다 200% 이상의 뛰어난 성능을 제공합니다.

그럼 Merge 구문을 어떻게 사용하느냐? 아래의 간단한 예제만 봐도 쉽게 사용할 수 있습니다.
우선 테스트를 위해 Source와 Target이라는 2개의 테이블을 생성합니다.

CREATE TABLE Source (id INT, name NVARCHAR(100), qty INT);
CREATE TABLE Target (id INT, name NVARCHAR(100), qty INT);

그리고 Merge를 사용하여 Target 테이블을 Source 테이블과 동기화 시킬 수 있습니다.
(주석을 참조하시면 각각의 경우에 맞게 Action을 취할 수 있다는 것을 확인할 수 있습니다)

MERGE Target AS t
USING Source AS s
ON t.id = s.id
WHEN MATCHED AND
(t.name != s.name OR t.qty!= s.qty) THEN

-- 동일한 Row가 존재하고 데이터가 다르면
UPDATE SET t.name = s.name, t.qty = s.qty
WHEN NOT MATCHED BY TARGET THEN

-- 소스에는 Row가 존재하는데 Target에는 Row가 존재하지 않으면
INSERT VALUES (s.id, s.name, s.qty)
WHEN NOT MATCHED BY SOURCE THEN

-- Target에는 데이터가 존재하는데 Soruce에는 데이터가 없으면
DELETE
OUTPUT $action, inserted.id, deleted.id;

참 쉽죠~잉?