Merge

Programming/MS-SQL 2015. 8. 5. 14:28

Merge 2008 부터 사용가능


2개의 테이블을 Merge(병합)해주는 기능으로


병합시

- 기존에 존재하는 데이터는 Update

- 신규 추가되는 데이터는 Insert

- 삭제 가능



USE WorkDB

GO

 

CREATE TABLE Master

(

 UserID        VARCHAR(10)

,Name          VARCHAR(10)

CONSTRAINT PK_Master PRIMARY KEY (UserID)

)

GO

 

CREATE TABLE Temp

(

 UserID        VARCHAR(10)

,Name          VARCHAR(10)

CONSTRAINT PK_Temp PRIMARY KEY (UserID)

)

GO 

 

2개의 테이블 Master 와 Temp 를 Merge 해보겠습니다.


최종결과는 Master에 저장이 됩니다.


테스트 자료를 생성 합니다.


INSERT INTO Master VALUES ('sorrow1999','백경록')

INSERT INTO Master VALUES ('marsland','백경팔') 


INSERT INTO Temp VALUES ('after','그후로')

INSERT INTO Temp VALUES ('marsland','백경민') 

 


Merge 를 위한 쿼리문은 아래와 같습니다.

 

SET NOCOUNT ON

 

MERGE Master

USING Temp

ON Master.UserID = Temp.UserID



WHEN MATCHED THEN

     UPDATE

          SET  Master.Name = Temp.Name


WHEN NOT MATCHED THEN

     INSERT (UserID, Name)

     VALUES (Temp.UserID, Temp.Name)

;

GO


실행 결과는 아래와 같습니다.



새로 추가된 after 는 insert 되었으며

이름이 변경된 marsland 는 백경팔 -> 백경민 으로 update 되었습니다.


대량의 데이터 취합 및 갱신시에 사용하면 편할듯 합니다.


기존 고객사 서버의 자료를 가져와서 내부 솔루션 서버에 입력후 활용할때 일일이 쿼리를 작성해서 취합 했었는데 해당부분을 Merge 를 이용하여 대체하면 훨씬 간결해 질것 같습니다.






Posted by 푸르른노을
,