본문 바로가기

프로그램

[MSSQL]MSSQL TRIGGER 샘플

반응형

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://lincat.me/113

http://stackoverflow.com/questions/741414/insert-update-trigger-how-to-determine-if-insert-or-update