간단한 트리거 샘플
CREATE TABLE TEST_TB1
(
idx int PRIMARY KEY identity(1,1)
,TB1_V1 varchar(20)
,TB1_V2 varchar(20)
)
CREATE TABLE TEST_TB2
(
idx int PRIMARY KEY identity(1,1)
,TB2_V1 varchar(20)
,TB2_V2 varchar(20)
,TB2_V3 varchar(20)
)
GO
/*====================================================================================
특정 필드에 대한 트리거
TEST_TB2의 TB2_V3컬럼 값이 변경/삭제/등록 될 경우 트리거를 실행해서 TEST_TB1에 저장
====================================================================================*/
CREATE TRIGGER TRG_Test2
ON TEST_TB2
FOR DELETE, INSERT, UPDATE /*삭제,입력,업데이트시 일어난다.*/
AS
SET NOCOUNT ON
DECLARE @idx varchar(20), @value1 varchar(20), @value2 varchar(20), @value3 varchar(20)
DECLARE @ACTION AS CHAR(1) /*삭제,입력,업데이트 구분자*/
SET @ACTION='I' /*기본적으로 입력*/
IF EXISTS(SELECT * FROM DELETED) /*삭제가 있으면? 업데이트 또는 삭제*/
BEGIN
SET @ACTION=(CASE WHEN EXISTS(SELECT * FROM inserted) THEN 'U' ELSE 'D' END)
END
IF @ACTION='D'
BEGIN
/*삭제시 수행할 쿼리들*/
SELECT @idx=idx, @value1=TB2_V1, @value2=TB2_V2, @value3=TB2_V3 FROM DELETED /*삭제된 테이블에서 데이터 추출*/
INSERT INTO TEST_TB1(TB1_V1, TB1_V2) values (@idx, @value1+'/'+@value2+'/'+@value3) /*입력할 테이블에 삭제된 테이블 데이터를 Insert함*/
END
ELSE IF @ACTION='U'
BEGIN
/*업데이트시 수행할 쿼리들*/
IF UPDATE(TB2_V3) /*특정 컬럼이 변경될 경우에만 적용*/
BEGIN
SELECT @idx=idx, @value1=TB2_V1, @value2=TB2_V2, @value3=TB2_V3 FROM INSERTED /*변경된 테이블에서 데이터 추출*/
INSERT INTO TEST_TB1(TB1_V1, TB1_V2) values (@idx, @value1+'/'+@value2+'/'+@value3) /*입력할 테이블에 변경된 테이블 데이터를 Insert함*/
END
END
ELSE
BEGIN
/*입력시 수행할 쿼리들*/
SELECT @idx=idx, @value1=TB2_V1, @value2=TB2_V2, @value3=TB2_V3 FROM INSERTED /*변경된 테이블에서 데이터 추출*/
INSERT INTO TEST_TB1(TB1_V1, TB1_V2) values (@idx, @value1+'/'+@value2+'/'+@value3) /*입력할 테이블에 변경된 테이블 데이터를 Insert함*/
END
SET NOCOUNT OFF
GO
/*
DROP TRIGGER TRG_Test2
SELECT * FROM TEST_TB1
SELECT * FROM TEST_TB2
INSERT INTO TEST_TB2(TB2_V1, TB2_V2, TB2_V3) VALUES('가', '나', '다')
UPDATE TEST_TB2 Set TB2_V2='수정' WHERE idx=7
UPDATE TEST_TB2 Set TB2_V3='수정' WHERE idx=7
DELETE TEST_TB2 WHERE idx=6
--트리거 조회
SELECT * FROM sysobjects WHERE type='TR'
sp_helptext [TRG_Test2]
*/
'[ 서버 & DB 관련 ] > MSSQL' 카테고리의 다른 글
MSSQL NULL 맨 뒤로(맨 아래) 정렬 (0) | 2019.03.08 |
---|---|
MS-sql server 메모리 과부하 대처법 (0) | 2018.10.15 |
MSSQL 권한이 있는 데이터 베이스만 보이도록 설정 (0) | 2018.09.18 |
like 검색 (int형도 문자로 검색) (0) | 2018.08.08 |
일괄처리 (INSERT) (0) | 2018.08.08 |