반응형

/**********************************************************************************************
-- Title : [2k5] 컬럼 업데이트(COLUMNS_UPDATED)에 의한 트리거 처리
-- Reference : hanbitbook.co.kr
-- Key word : create trigger columns_updated
**********************************************************************************************/
use sqldb;
go

drop table backup_usertbl;
go
 
create table backup_usertbl
( userid  nchar(8) ,
  name    nvarchar(10) ,
  birthyear   int ,
  addr   nchar(4) ,
  mobile1 nchar(3),
  mobile2   nchar(8),
  height    smallint ,
  modtype  nchar(2), -- 변경된 타입. '수정' 또는 '삭제'
  moddate  datetime, -- 변경된 날짜
  moduser  nvarchar(256) -- 변경한 사용자
);
go
 
drop table usertbl2;
go
 
select * into usertbl2 from usertbl;
go
 
create trigger trg_backupusertbl  -- 트리거 이름
on usertbl2 -- 트리거를 부착할 테이블
after  update,delete  -- 삭제,수정 후에 작동하도록 지정
as
 declare @modtype nchar(2) -- 변경 타입
 if (columns_updated() > 0) -- 업데이트 되었다면
  begin
   set @modtype = '수정'
  end
 else -- 삭제되었다면,
  begin
   set @modtype = '삭제'
  end
 -- delete 테이블의 내용(변경전의 내용)을 백업테이블에 삽입
 insert into backup_usertbl
  select userid, name, birthyear, addr, mobile1, mobile2,
    height, @modtype, getdate(), user_name() from deleted;
go
 
update usertbl2 set addr = '미국' where userid = 'jjj';
select * from backup_usertbl;
go

delete usertbl2 where height >= 180;
select * from backup_usertbl;
go

truncate table usertbl2; --trigger로 인식되지 않는다.
go

select * from backup_usertbl;
go

반응형

+ Recent posts