Sduty/MS-SQL

Table Trigger

돌멘 2013. 11. 7. 16:46

트리거란 특정 테이블에 Insert, Delete, Update가 발생했을때 다른 이벤트를 처리하도록 하기 위해 DB에서 재공

- SP와 비슷하게 작동하지만 직접 실행 시킬수 없고 오직 해당 테이블이나 뷰에 이벤트(insert, update, delete)가 발생할 경우에만 실행된다.

- SP와 달리 paramete, return 값을 사용할수 없다.

 

1) INSERT

    회원 테이블에 회원이 등록되었을때 회원 정보 중에서 user_id와 phoneno을 주소록 테이블에 기록되는 예.

    회원테이블 - Member, 주소록테이블 - address

    ex) //Member 테이블에 Insert가 발생한 경우 실행되는 Trigger

         Create Trigger ut_Member_Ins on member

         for Insert

         AS

             declare @user_id varchar(20)

             declare @phoneno varchar(20)

 

             select @user_id = user_id, @phoneno = phoneno from inserted

             insert into address values(@user_id, @honeno, getDate())

 

        ==> 입력된 데이터는 inserted 라고 하는 약속된 테이블에 기록된다.

              그중에서 필요한 필드 값만 가져와 address 에 기록한다.

              즉, 회원이 등록된 경우 회원정보 중에서 아이디와 휴대폰 번호를 주소록이라고 하는 테이블에 입력하기 위한 것.

 

2) DELETE

    회원 테이블의 특정 레코드를 삭제했을 때 백업용 회원 테이블에 해당 레코드를 입력하는 예

    회원 테이블 - member, 백업용 회원테이블 - member_backup

    ex) //member 테이블에 대해서 Delete가 발생한 경우에 실행되는 trigger

         create trigger ut_member_delete on member

         for delete

         as

            insert into member_backup

            select * from deleted

     ==> 삭제된 데이터는 deleted라고 하는 약속된 테이블에 기록된다.

           회원 테이블의 모든 데이터를 백업하는 것이므로 특정 필드만을 쿼리하지 않고 전체를 쿼리하여 member_backup 테이블에 기록한다.

3) UPDATE

    회원테이블에서 휴대폰 번호를 변경한 경우 이를 주소록 테이블에도 변경.

    회원테이블 - member, 주소록테이블 - address

    ex) //member 테이블에 update가 발생한 경우 실행되는 trigger

         create trigger ut_member_update on member

         for update

         as

            declare @user_id varchar(20)

            declate @phoneno varchar(20)

            if update(phoneno) begin

               select @phoneno = phoneno, @userid = user_id from inserted

               update address set phoneno = @phoneno

               where user_id = @user_id

             end

   ==> phoneno 값이 011-1234-5678 에서 010-1234-5678로 변경됐다면 원래 들이 있던 011-1234-5678은 deleted 테이블에 새로 변경된 010-1234-5678은 inserted 테이블에 놓여지게 된다. 따라서 업데이트 이전의 값과 이후의 값을 deleted와 inserted라고 하는 테이블을 통해서 확인 할 수 있다.

 

 

* DML Trigger의 종류

   1) AFTER Trigger

       - 테이블에 insert, update, delete 등의 작업이 일어났을때 작동한다.

       - 해당작업 후에 작동한다.

       - 테이블에만 작동하며 뷰에는 작동하지 않는다.

   2) INSERTED OF Trigger

       - BEFORE 트리거라도 부른다.

       - 테이블이나 뷰에 이벤트가 작동되지 전에 작동한다.

       - 테이블 뿐 아니라 뷰에도 작동되며, 주로 뷰가 업데이트가 가능하도록 사용한다.

       - insert, update, delete 세가지 이벤트로 작동한다.

   3)

'Sduty > MS-SQL' 카테고리의 다른 글

같은 IP영역대 서버연결  (0) 2013.12.27
SP 조건 걸기  (0) 2013.11.08
테이블 및 임시테이블 존재 여부 확인  (0) 2013.03.30
MSSQL 2008 r2 다운로드 및 설치  (0) 2012.11.01
주석달기(table, column)  (0) 2011.04.28