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 문은 세미콜론(;)으로 종료해야 한다.
'DBMS > SQL Server' 카테고리의 다른 글
[SQL Server] 데이터, 로그 파일 사이즈 자동증가 확인 (0) | 2013.07.16 |
---|---|
[SQL Server] 테이블 스크립팅시 인덱스 포함하기 (0) | 2013.06.20 |
[SQL Server] IntelliSense 기능 (0) | 2013.06.05 |
[SQL Server] SQL Server 2008의 새로운 날짜/시간 데이터 형식 (0) | 2013.05.22 |
[SQL Server] 스파스 열 (Sparse Column) (0) | 2013.05.21 |