본문으로 바로가기

간단한 트리거 샘플

category [ 서버 & DB 관련 ]/MSSQL 2018. 8. 8. 12:00

간단한 트리거 샘플



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] 


*/