INSTEAD OF 트리거

SQL Server 2008. 3. 17. 10:49

MSSQL 2000 에서는 Oracle의 BEFORE 트리거와 유사한 INSTEAD OF 트리거란 것이 도입되었다.


http://www.microsoft.com/korea/msdn/library/ko-kr/dnsqlmag2k/html/insteadof.aspx


INSTEAD OF 트리거가 FOR 트리거 (기존의 AFTER 트리거)와 다른 점은 다음과 같다. (솔직히... 별로 바람직한 것 같지는 않다. 트리거란 것 자체가 바람직한 방법이 아니긴 하지.)



1. INSTEAD OF 트리거는 어떤 ACTION이 발생하기 전에 호출된다.

2. FOR 트리거는 트리거 내에서 강제 ROLLBACK 하지 않으면 원래의 ACTION이 그대로 승인되지만 INSTEAD OF 트리거는 원래의 ACTION을 트리거 내에서 해주지 않으면 취소된다. (수행되지 않는다.)
예를 들어,

CREATE TRIGGER TEST_TRIG
ON TEST_TAB
INSTEAD OF INSERT
AS

-- 할일을 한다...

  INSERT INTO TEST_TRIG
  SELECT * FROM INSERTED
  -- 위의 INSERT 문이 없다면 이 INSERT는 일어나지 않는다!!

만약 INSTEAD OF UPDATE라면??? 엄청 복잡해지겠지...
INSERTED와 JOIN해서 컬럼별로... 아 머리아파...

이 외에도 여러가지 제약사항 들이 있다.
자세한 내용은 위에 링크된 기술문서에...
Posted by kuaaan
,


사랑합니다. 편안히 잠드소서