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 함수를 사용하면 특정한 열이 수정되었을 때 동작하도록 할 수 있다.