반응형
Trigger은 Insert, Update, Delete 의 동작이 실행될때 같이 실행되는 펑션
간단한 예제
CREATE TRIGGER [dbo].[test_tg] ON [dbo].[member] -- member라는 테이블의 Trigger FOR INSERT, UPDATE -- Insert나 Update시에 동작함 AS SET NOCOUNT ON DECLARE @memberID varchar(20) select @memberID = memberID FROM INSERTED -- insert 된 테이블에서 memberID를 추출함 INSERT INTO test(test) values (@memberID)-- test 테이블에 Insert된 memberID를 Insert함 SET NOCOUNT OFF
간단하게 위의 예제처럼 member 테이블에 Insert나 Update 발생시에 test라는 테이블에 memberID를 Insert하는 트리거입니다
아래에서 INSERTED만 하고 UPDATE가 없는 이유는 UPDATE 로직 자체가 Delete후 Insert 이기 때문에 INSERTED만 해주면 Insert든 Update든 동작함
** 특정 필드값만 변경되었을때의 트리거(Trigger)
CREATE TRIGGER [dbo].[test_tg] ON [dbo].[member] FOR UPDATE AS SET NOCOUNT ON declare @memberID varchar(20) if update(memberID) BEGIN select @memberID = memberID FROM INSERTED -- insert 된 테이블에서 memberID를 추출함 INSERT INTO test(test) values (@memberID)-- test 테이블에 Insert된 memberID를 Insert함 END SET NOCOUNT OFF
이 트리거의 경우에는 member 테이블에서 memberID값이 변경될 경우에만 실행됨.
** 동시에 여러개의 레코드가 변경될때의 트리거(Trigger)
CREATE TRIGGER [dbo].[test_tg] ON [dbo].[member] FOR UPDATE, INSERT AS SET NOCOUNT ON DECLARE @memberID varchar(20) DECLARE trigger_cur CURSOR FOR SELECT memberID FROM INSERTED OPEN trigger_cur FETCH NEXT FROM trigger_cur INTO @memberID WHILE (@@FETCH_STATUS=0) BEGIN INSERT INTO test(test) values (@memberID)-- test 테이블에 Insert된 memberID를 Insert함 FETCH NEXT FROM trigger_cur INTO @memberID END CLOSE trigger_cur DEALLOCATE trigger_cur SET NOCOUNT OFF
cursor를 사용해서 루핑을 돌려서 사용함
반응형