반응형
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
반응형