/**********************************************************************************************
-- 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