SQL 서버 2000은 데이터의 무결성을 지키는 방법으로 제약 조건과 트리거라는 것을 제공해준다.

이중에서 트리거는 특정 데이터베이스의 테이블이나 뷰에 대해 UPDATE, INSERT 또는 DELETE문을 실행할 때 자동으로 업무규칙을 보장하는 데 사용할 수 있는 특수한 형식의 프로시저라고 할 수 있다.

단, 저장프로시저와 다른 점은 일단 데이터가 수정/삭제 되는 순간 자동으로 실행된다는 것이다.

즉, 트리거는 직접 호출해서 쓸수는 없다. 또한 저장프로시저처럼 파라미터를 사용할 수 없다.

7.0 이후부터 트리거의 갯수 제한은 없으며, 오라클과 달리 행을 기초로 한 트리거를 지원하지 않는다. (구문 기준)

즉 어떠한 실행 구문으로 10개의 행이 UPDATE 되었다 하더라도 이 테이블에 있는 UPDATE 트리거는 10번이 아닌 한번만 수행된다.

CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
     { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
         [ WITH APPEND ]
         [ NOT FOR REPLICATION ]
         AS
         [ { IF UPDATE ( column )
             [ { AND | OR } UPDATE ( column ) ]
                 [ ...n ]
         | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
                 { comparison_operator } column_bitmask [ ...n ]
        } ]
 
         sql_statement  -- 이 부분에 저장프로시저와 동일한 방식으로 쿼리를 작성한다.
    }
} 

AFTER는 정의된 INSERT, UPDATE, DELETE문 수행 후에 작업이 수행되며 지정된 키워드가 FOR문일 경우는 AFTER가 기본값이다.

AFTER 트리거는 뷰에서는 정의할 수 없으며 이전의 제약조건 확인 작업이 성공하지 않으면 이 트리거는 실행되지 않는다.

 

INSTEAD OF 트리거는 기존에 존재하는 유형의 트리거 작업을 완전히 무시하고 대신 수행 하는 특징이 있다.

즉 어떠한 제약사항보다 먼저 INSTEAD OF 트리거 작업을 수행한다.

 

IF UPDATE 함수를 사용하면 특정한 열이 수정되었을 때 동작하도록 할 수 있다.