[MSSQL] INSERT/UPDATE/DELETE 트리거를 하나로
2011. 5. 31. 13:58ㆍCoders
INSERT/UPDATE/DELETE 트리거를 하나로 만들 수 있습니다.
(MSSQL 만 되는 건 아닙니다만, 각각의 DBMS 마다 문법은 조금씩 다르겠죠.)
그에 대한 예제입니다.
결과는 다음과 같습니다.(예제는 RAISERROR 를 하지만, 이는 그냥 제대로 작동하는가만 보여주기 위한 예제이므로, 결과는 반영이 되며 오류를 내뱉습니다.)
※ Syntax Highlighting : http://www.stevetrefethen.com/highlighter/default.aspx
(MSSQL 만 되는 건 아닙니다만, 각각의 DBMS 마다 문법은 조금씩 다르겠죠.)
그에 대한 예제입니다.
CREATE TABLE TR_TEST ( COL NVARCHAR(1) ) GO CREATE TRIGGER TRIGGER_DML_TR_TEST ON TR_TEST WITH ENCRYPTION FOR INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON; DECLARE @P_ACTION NVARCHAR(1); SET @P_ACTION = 'I'; IF EXISTS ( SELECT 1 FROM DELETED ) BEGIN SET @P_ACTION = 'D'; IF EXISTS ( SELECT 1 FROM INSERTED ) BEGIN SET @P_ACTION = 'U'; END; END; IF @P_ACTION = 'I' BEGIN RAISERROR ('인서트', 16, 1); END ELSE IF @P_ACTION = 'U' BEGIN RAISERROR ('업데이트', 16, 1); END ELSE IF @P_ACTION = 'D' BEGIN RAISERROR ('딜리트', 16, 1); END SET NOCOUNT OFF; RETURN; END GO INSERT INTO TR_TEST VALUES ( '응' ) GO UPDATE TR_TEST SET COL = '뿅' GO DELETE FROM TR_TEST GO DROP TABLE TR_TEST GO
결과는 다음과 같습니다.(예제는 RAISERROR 를 하지만, 이는 그냥 제대로 작동하는가만 보여주기 위한 예제이므로, 결과는 반영이 되며 오류를 내뱉습니다.)
메시지 50000, 수준 16, 상태 1, 프로시저 TRIGGER_DML_TR_TEST, 줄 28
인서트
(1개 행 적용됨)
메시지 50000, 수준 16, 상태 1, 프로시저 TRIGGER_DML_TR_TEST, 줄 32
업데이트
(1개 행 적용됨)
메시지 50000, 수준 16, 상태 1, 프로시저 TRIGGER_DML_TR_TEST, 줄 36
딜리트
(1개 행 적용됨)
인서트
(1개 행 적용됨)
메시지 50000, 수준 16, 상태 1, 프로시저 TRIGGER_DML_TR_TEST, 줄 32
업데이트
(1개 행 적용됨)
메시지 50000, 수준 16, 상태 1, 프로시저 TRIGGER_DML_TR_TEST, 줄 36
딜리트
(1개 행 적용됨)
※ Syntax Highlighting : http://www.stevetrefethen.com/highlighter/default.aspx
'Coders' 카테고리의 다른 글
[MSSQL] 테이블의 기본 값이 뭘까? (0) | 2011.07.12 |
---|---|
[C#] 특정 문자열을 막는 코드 (0) | 2011.03.17 |
[C#] TextBox 의 숫자 자릿수 통제 (3) | 2010.12.15 |