반응형
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 (데이터 복사)
반응형
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] XML 데이터를 테이블 형태로 저장 (XML to DB) (0) | 2019.10.06 |
---|---|
[MSSQL] JOIN CASE, JOIN OR 조건에 따라 조인테이블 및 조인조건 변경 (0) | 2019.10.02 |
[MSSQL] COUNT(*) COUNT(1), COUNT(컬럼명) 행의 개수 (1) | 2019.10.01 |
[MSSQL] 세로 데이터 가로로 출력 (데이터 한줄로 출력) STUFF, FOR XML PATH (0) | 2019.09.29 |
[MSSQL] COUNT CASE (조건 카운트) COUNT DISTINCT (중복제거 카운트) (2) | 2019.09.29 |