[MSSQL] INSERT/UPDATE/DELETE 트리거를 하나로

2011. 5. 31. 13:58Coders

INSERT/UPDATE/DELETE 트리거를 하나로 만들 수 있습니다.
(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개 행 적용됨)

※ 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