MSSQL TRIGGER 샘플
* 목적
매일 ORACLE만 사용하다가 MSSQL을 사용중인데 트리거 만들 일이 생김
(운영 입장에서는 트리거 겁나 싫지만 막상 트리거 안쓰고 구현하려니 귀찮아지는 아이러니함.-_ㅠ)
* 내용
oracle 의 new 와 old 접근을 위해서
inserted 와 deleted 라고 정의된 유사테이블을 사용하였음
결론은
insert => inserted 에서 가져옴
update => inserted 가 NEW, deleted 가 OLD 역활
delete => deleted 에서 구함
update 구분 여부를 알기 위해 아래과 같이 검색도 해봄
http://stackoverflow.com/questions/741414/insert-update-trigger-how-to-determine-if-insert-or-update
(case 에 exists 를 이용하여 select * from instered 를 확인하고 있음)
문법은
craete 트리거명 on 테이블명
for insert, update, delete
as
begin
end
였음
내 경우에는 insert 시 특정 필드에 update를 해야 하는데 바로 inserted 로 접근을 하니 오류가 발생하였음.
update 테이블 set
col01 = inserted.col02
그래서 변수에 할당해서 사용하였음
delcare @col02 varchar(10);
select @col02 = col02 from inserted;
전체 샘플 소스 임
create trigger dbo.트리거 on dbo.테이블
for insert
as
begin
declare @user_id varchar(100)
, @start_date varchar(10)
, @end_date varchar(10)
;
select @user_id = user_id, @start_date = start_date, @end_date = end_date
from inserted
;
update 테이블 set
status = case when convert(varchar(10), getdate(), 112) between start_date and end_date then 'NOW' else ' ' end
where user_id = @user_id
and start_date = @start_date
and end_date = @end_date
;
end
* 참고url
http://stackoverflow.com/questions/741414/insert-update-trigger-how-to-determine-if-insert-or-update