.NET/MS-SQL

[MS-SQL] 트리거 기초

네코냥이 2013. 8. 27. 10:14

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(기초)|작성자 푸른밤