본문 바로가기
Develop/Database

[MSSQL] MSSQL Merge 활용하기

by 코딩의성지 2022. 2. 2.

보통 이런 경험을 해본 적 있을 것이다.

 

게임 캐릭터를 삭제했는데, 그 삭제 결과가 바로 반영되지 않고, 일주일 뒤에 반영되거나 하는 그런 경험 말이다.

실제로 Merge 기능을 사용하면 이러한 로직을 구현할 수 있다.

 

아래 테이블을 보자.

총 10명의 회원정보가 있다.

 

만약에 이 상황에서 1명은 신규가입을 하고, 2명은 주소변경을 하고, 2명은 회원 탈퇴를 한다고 가정하자.

그런데 내 웹사이트에서는 결과를 바로 반영하지 않고 일주일 뒤에 반영한다고 할때는 MERGE를 이용해주면 된다.

 

아래 SQL을 보자.

일단 변경된 정보를 담는 테이블 만들었다.

CREATE TABLE changeInfoTbl
( changeType NCHAR(4),
	userID char(8),
	name nvarchar(10),
	addr nchar(2) );

여기서 changeType은 신규가입, 회원탈퇴, 주소변경 등 회원정보 변경 상태를 의미한다.

 

INSERT INTO changeInfoTbl VALUES
	('신규가입', 'BYO', '강뽀야', '경기'),
	('주소변경', 'LSG', NULL, '경남'),
	('주소변경', 'YJS', NULL, '서울'),
	('회원탈퇴', 'EJW', NULL, NULL),
	('회원탈퇴', 'KKH', NULL, NULL) ;

앞서 설명한 상황 처럼 1명 신규가입, 2명 주소변경 2명 회원탈퇴를 하는 정보를 입력했다.

 

그리고 일주일 뒤 아래 SQL이 수행된다.

MERGE memberTbl AS MT
	USING changeInfoTbl CIT
	ON MT.userID = CIT.userID
	WHEN NOT MATCHED AND changeType = '신규가입' THEN
		INSERT (userID, name, addr) VALUES(CIT.userID, CIT.name, CIT.addr)
	WHEN MATCHED AND changeType = '주소변경' THEN
		UPDATE SET  MT.addr = CIT.addr
	WHEN MATCHED AND changeType = '회원탈퇴' THEN
		DELETE;

 

SQL 수행 후의 테이블은 데이터는 아래와 같다.

 

MERGE는 이런식으로 실무에서 많이 쓰이는 방식이니 잘 기억해두도록 하자.

 

끝.

반응형

댓글