본문 바로가기

프로그래밍/MSSQL

[MSSQL] OUTPUT INSERTED, DELETED 데이터 수정 및 삭제 전 백업

반응형

 

 

 

OUTPUT INSERTED, OUTPUT DELETED

 

 

OUTPUT

SELECT문과 달리 INSERT, UPDATE, DELETE문은 결과가 리턴되지 않는다.

 

OUTPUT은 INSERT, UPDATE, DELETE 또는 MERGE 문의 영향을 받는 각 행의 정보 또는 각 행을 기반으로 하는 식을 반환

 

 

 

 

 

예제. INSERT 결과 데이터 리턴

#TEMP_T 테이블에 데이터를 입력해보자

 

INSERT INTO #TEMP_T (NAME, SCORE) VALUES('A', 100)

 

위의 쿼리를 수행하면, (1개 행이 영향을 받음)과 같은 메시지를 출력한다.

 

결과

 

 

하지만, 나는 내가 입력시킨 데이터의 값을 리턴시키고싶다.

 

INSERT INTO #TEMP_T (NAME, SCORE) OUTPUT INSERTED.* VALUES('A', 100)

 

그럴 경우 위의 쿼리를 수행하면, 데이터 입력과 동시에 입력시킨 데이터를 리턴 시킨다.

 

결과 데이터

 

 

 

 

 

 

예제 2. UPDATE, DELETE 결과 데이터 리턴

데이터 수정 및 삭제도 마찬가지다.

 

UPDATE #TEMP_T SET NAME = 'B' OUTPUT DELETED.*, '→' AS '작업', INSERTED.*

 

결과 데이터

 

OUTPUT DELETED는 수정되기 전 컬럼의 값

OUTPUT INSERTED는 수정된 후의 컬럼의 값을 리턴한다.

 

 

 

 

 

 

예제 3. 데이터 수정 및 삭제 작업 전 데이터를 백업

값을 수정/삭제하면서, 혹시 모를 경우를 대비해서 데이터를 백업 후 변경하고자 한다.

즉, 변경 전의 데이터 값을 #TEMP_T_BAK 테이블에 입력(백업) 하고 #TEMP_T의 값을 수정하려고 한다.

 

UPDATE #TEMP_T SET NAME = 'C'
OUTPUT DELETED.* -- 변경 전 데이터
INTO #TEMP_T_BAK -- #TEMP_T_BAK 테이블로 입력
DELETE FROM #TEMP_T
OUTPUT DELETED.*
INTO #TEMP_T_BAK
WHERE 조건

 

 

 

[MSSQL] SELECT INTO (테이블 복사), INSERT INTO SELECT (데이터 복사)

 

 

반응형