[MS-SQL] 트리거 기초
http://blog.naver.com/primary_key/110023557784
[출처] MSSQL Trigger(기초)|작성자 푸른밤
[출처] MSSQL Trigger(기초)|작성자 푸른밤
오라클은 트리거를 탈때 칼럼마다 OLD, NEW가 생성되는데 MSSQL은 변형된 데이터가 테이블에 저장되는 것이다.
간단히 정리하자면
MSSQL 의 임시테이블 DELETED, INSERTED 는
데이터 INSERT의경우 : INSERTED 발생
데이터 UPDATE의경우 : DELETED, INSERTED 발생
데이터 DELETE의 경우 : DELETED 발생
한다.
간단한 테스튼 아래와 같다
ALTER TRIGGER [rzzzTest] on [dbo].[zzzTest]
FOR INSERT, UPDATE, DELETE NOT FOR REPLICATION
AS
BEGIN
DECLARE @CNT_INS INT
, @CNT_DEL INT
SELECT @CNT_DEL = COUNT(*) FROM DELETED
SELECT @CNT_INS = COUNT(*) FROM INSERTED
IF @CNT_DEL > 0 AND @CNT_INS > 0 BEGIN --UPDATE된 것임
update c set
c.B1 = 'update'
,c.G1 = @CNT_DEL
,c.F1 = @CNT_INS
from zzzTest c, inserted b
where c.itemcode = b.itemcode
select 'update'
END ELSE IF @CNT_DEL = 0 AND @CNT_INS > 0 BEGIN --INSERT 된 것임
update c set
c.a1 = 'insert'
,c.G1 = @CNT_DEL
,c.F1 = @CNT_INS
from zzzTest c, inserted b
where c.itemcode = b.itemcode
select 'insert'
END
ELSE IF @CNT_DEL > 0 AND @CNT_INS = 0 BEGIN --DELETE 된 것임
SELECT 1 --아무 이벤트 없는 것임
END
end
[출처] MSSQL Trigger(기초)|작성자 푸른밤