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