Blog Content

    티스토리 뷰

    48.MS_SQL 2008 - Trigger ( 트리거 )

    반응형

    -- 트리거(방아쇠) : 구매(주문),재고테이블: 한명하나의상품을구매하면, 재고테이블에서

    -- 해당재고량을1감소를자동처리해주는시스템: 주로저장프로시저쓴다.

     

    --[0] 트리거연습용테이블생성

    --Drop Table dbo.[구매테이블]

    Create Table dbo.[구매테이블]

    (

           CustomerID Int, --고객번호

           ProductID Int,  --상품번호

           Quantity Int, --주문수량

    )

    Go

     

    --Drop Table dbo.[재고테이블]

    Create Table dbo.[재고테이블]

    (

           ProductID Int,      --상품번호

           Quantity Int, --재고수량

    )

    Go

     

     

    --[1] 재고테이블에1, 2번제품을10개넣어놓음(가상)

    Insert [재고테이블] Values(1, 10)

    Insert [재고테이블] Values(2, 10)

    Select * From [재고테이블]

     

     

    --[2] 구매가한번이루어지면자동으로재고테이블에서감소시키는트리거작성

    Create Trigger [자동재고감소]

    On [구매테이블]

    For Insert -- 구매테이블에데이터가입력되는순간

    As

           Update [재고테이블]

           Set Quantity = Quantity - 1

          

           Print '재고테이블에서1개감소했습니다.'

    Go

     

     

    --[3] 구매테이블에Insert문을실행시켜본다.

    Insert [구매테이블] Values (1, 1, 1)

     

     

    --[4] 트리거에의해재고테이블의모든필드값이자동으로감소됨을알수있다.

    Select * From [재고테이블]

     

     

    --[5] 트리거를수정해보자: 구매개수만큼줄이도록수정

    Alter Trigger [자동재고감소]

    On [구매테이블]

    For Insert

    As

           Declare @ProductID Int

           Declare @Quantity Int

          

           Set @ProductID = 0

           Set @Quantity = 0

          

           --Select * From [구매테이블]

          

           Select

                 @ProductID = ProductID,

                 @Quantity = Quantity

           From Inserted --Inserted에의해서입력된데이터받아옴(Inserted라는 임시테이블에서 ProductID값을 변수인 @ProductID에 대입하고, Quantity값을 변수인 @Quantity에 대입한다.)

          

           Update [재고테이블]

           Set Quantity = Quantity - @Quantity

           Where ProductID = @ProductID

    Go

     

     

    --[6] 1번제품만을1개감소

    Insert [구매테이블] Values(1, 1, 1)

    Select * From [재고테이블]

     

     

    --[7] 2번제품만을3개감소

    Insert [구매테이블] Values(1, 2, 3)

    Select * From [재고테이블]

     

     

    --[8] 트리거삭제

    Drop Trigger [자동재고감소]

    --[!] [자동재고감소]와동일한기능을하는입력저장프로시저

    Create Procedure dbo.[자동재고감소프로시저]

           @CustomerID Int,

           @ProductID Int,

           @Quantity Int,

    As

           Begin Tran

                 Insert [구매테이블]

                 Values(@CustomerID, @ProductID, @Quantity)

     

                 Update [재고테이블]

                 Set Quantity = Quantity - @Quantity

                 Where ProductID = @ProductID

     

                 Select * From [재고테이블]

           Commit Tran

    Go

    Exec [자동재고감소프로시저] 1, 2, 3

    Go


    출처 : holland14.tistory.com
    반응형

    Comments