본문으로 바로가기

[MS-SQL] Merge 기능

category Dev/MS-SQL 2016. 9. 7. 15:56

MS-SQL 2008이상에서는 Merge라는 기능이 생겼는데 이 기능은 구조가 같은 두개의 테이블을 하나로 합쳐주는 기능이다.

이것 저것 테스트해봤는데 일단 이 기능은 Master DB에서밖에 사용이 안되는 것 같다. 마스터에서 타 DB 호출하여 사용가능하고 Linked로 연결된 서버는 Merge 기능이 작동하지 않는걸 확인했다.  하지만 내부 서버라면 유용하게 사용이 가능하다.

-- 테스트 임시 테이블 생성
DECLARE @MERGE_TABLE1 TABLE ( LOG_NO INT IDENTITY(1,1),
CODE VARCHAR(50),
MESSAGE VARCHAR(2000))
DECLARE @MERGE_TABLE2 TABLE ( LOG_NO INT IDENTITY(1,1),
CODE VARCHAR(50),
MESSAGE VARCHAR(2000))
 
 
-- 데이터 Insert
INSERT INTO @MERGE_TABLE1 VALUES('111', 'MESSAGE1')
INSERT INTO @MERGE_TABLE1 VALUES('222', 'MESSAGE2')
INSERT INTO @MERGE_TABLE1 VALUES('333', 'MESSAGE3')
 
 
INSERT INTO @MERGE_TABLE2 VALUES('111', 'MESSAGE1_1')
INSERT INTO @MERGE_TABLE2 VALUES('444', 'MESSAGE4')
 
 
SELECT * FROM @MERGE_TABLE1
SELECT * FROM @MERGE_TABLE2
 
 
-- Merge 시작
MERGE @MERGE_TABLE1 AS A -- UPDATE 문을적용받아 변경 또는 삽입 될 대상 테이블
USING @MERGE_TABLE2 AS B -- 비교대상 테이블
ON A.CODE = B.CODE
 
 
-- 데이터가 있을 경우 UPDATE
WHEN MATCHED THEN
   UPDATE
   SET  A.MESSAGE = B.MESSAGE
-- 없을 경우 INSERT
WHEN NOT MATCHED THEN
   INSERT (CODE, MESSAGE)
   VALUES (B.CODE,B.MESSAGE);
 
 
-- 변경 된 데이터 확인
SELECT * FROM  @MERGE_TABLE1
SELECT * FROM  @MERGE_TABLE2

댓글을 달아 주세요