본문 바로가기

Dev/MS-SQL

[MS-SQL] 트리거(Trigger) 여러가지 사용방법

반응형

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를 사용해서 루핑을 돌려서 사용함

반응형