MSSQL 에서 MERGE INTO 구문을 사용하는 방법을 알아보겠습니다.
MERGE INTO 구문을 사용하면,
단일 쿼리에서 한번에 여러가지 DML(INSERT, UPDATE, DELETE ) 작업을 수행할 수 있습니다.
(INSERT, UPDATE, DELETE를 한번에 처리할 수 있습니다.)
여러 DML 작업이 단일 쿼리에서 작동되기 때문에 각각 쿼리를 짜 작업해주는 것 보다 성능이 향상 됩니다.
또한, PK값때문에 INSERT 작업이 힘든 로직을 짜야할 경우 유용하다 할수 있습니다.
- 기본 문법
MERGE 변경될테이블명 AS A
USING 비교테이블명 AS B
ON A.컬럼명 = B.컬럼명
WHEN MATCHED THEN
--일치 할때 쿼리문
WHEN NOT MATCHED THEN
--불일치 할때 쿼리문
예를들어,
TARGET 테이블(변경될 테이블)의 데이터에
SOURCE 테이블(비교할 테이블)의 데이터를 비교해서
그 데이터가 있다면, UPDATE를 실행하고, 없다면, INSERT 하게 하는 구문입니다.
Ex)
MERGE TB_TARGET AS [TARGET]
USING TB_SOURCE AS [SOURCE]
ON [TARGET].CUSTOM_ID = [SOURCE].CUSTOM_ID
-- 테이블 TB_TARGET의 CUSTOM_ID 값이 TB_SOURCE의 CUSTOM_ID 중에 있을 경우
-- UPDATE
WHEN MATCHED THEN
UPDATE SET
,[TARGET].CUSTOM_NAME = [SOURCE].CUSTOM_NAME
,[TARGET].CUSTOM_REMARK = 'TB_SOURCE에 있는 사람입니다.'
-- 테이블 TB_TARGET의 CUSTOM_ID 값이 TB_SOURCE의 CUSTOM_ID 중에 없을 경우
-- INSERT
WHEN NOT MATCHED THEN
INSERT (CUSTOM_ID, CUSTOM_NAME, CUSTOM_REMARK)
VALUES (@@ROW_NUMBER, '링고비' ,'새로운 사람')
손님의 데이터를 관리하는 테이블이 2개가 있었는데, 테이블을 하나로 줄이려고 합니다.
그래서 TB_TARGET에 TB_SOURCE 데이터를 넣으려고 하는데 중복된 손님 정보는 UPDATE하고
중복되지 않은 손님 정보는 INSERT 쿼리를 실행하는 간단한 예시입니다.
- 조건을 추가해서 사용할 수도 있습니다.
MERGE 변경될테이블명 AS A
USING 비교테이블명 AS B
ON A.컬럼명 = B.컬럼명
WHEN MATCHED AND 조건 THEN
--일치 + 조건 할때 쿼리문
WHEN NOT MATCHED AND 조건A THEN
--불일치 + 조건A 할때 쿼리문
WHEN NOT MATCHED AND 조건B THEN
--불일치 + 조건B 할때 쿼리문
더 자세한 내용은 MSDN을 참조하면 됩니다.
'SQL > MS-SQL & SQL Server Management Studio' 카테고리의 다른 글
[MS SQL] SP 사용 로그 조회 (0) | 2019.09.25 |
---|---|
[MS SQL] 다른 테이블 조인(join) 후 UPDATE (0) | 2019.09.24 |
[MS SQL]SQL SERVER AGENT 사용 자동 스케줄링 (0) | 2019.09.17 |
[MSSQL] WHERE 절에 IF문 과 같은 효과 쿼리 (0) | 2019.09.04 |
[MS-SQL] 락(LOCK)걸린 쿼리, (조회/해제 (0) | 2019.08.22 |
댓글