posted by 네코냥이 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(기초)|작성자 푸른밤


'.NET > MS-SQL' 카테고리의 다른 글

인덱스 유형  (0) 2013.12.26
[MS-SQL] 인덱스 옵션  (0) 2013.09.01
[SQL CE] SQL Server Compact - 버전별 새로운 기능  (0) 2013.08.05
[MS-SQL] 임시테이블, 전역 임시테이블  (0) 2013.07.24
[MS-SQL] 성능모니터 간략설명  (0) 2013.07.24