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을 트리거 내에서 해주지 않으면 취소된다. (수행되지 않는다.)
예를 들어,
만약 INSTEAD OF UPDATE라면??? 엄청 복잡해지겠지...CREATE TRIGGER TEST_TRIG
ON TEST_TAB
INSTEAD OF INSERT
AS-- 할일을 한다...
INSERT INTO TEST_TRIG
SELECT * FROM INSERTED
-- 위의 INSERT 문이 없다면 이 INSERT는 일어나지 않는다!!
INSERTED와 JOIN해서 컬럼별로... 아 머리아파...
이 외에도 여러가지 제약사항 들이 있다.
자세한 내용은 위에 링크된 기술문서에...
'SQL Server' 카테고리의 다른 글
SQL Server의 SQL문에서 이벤트로그 기록하기 (0) | 2008.03.17 |
---|---|
UPDATE 비용에 대한 고찰 (1) (1) | 2008.03.17 |
SELECT에 LOCK을 거는 방법 (0) | 2008.03.17 |
SQL Server 프로시져 실행중 Sleep 주기 (0) | 2008.02.12 |
MSSQL Extended Stored Procedures Tutorials (0) | 2008.01.31 |