--트리거(방아쇠) : 구매(주문), 재고테이블 :
--한명 하나의 상품을 구매하면, 재고 테이블에서
-- 해당 재고량을 1감소를 자동처리해주는 시스템 : 주로 저장 프로시저 사용
--[0] 트리거 연습용 테이블 생성
use tempdb
Create Table dbo.[SellTable]
(
CustomerID int, --고객번호
ProductID int, --상품번호
Quantity int, --주문수량
)
Go
Create table dbo.[SaveTable]
(
ProductID int, --상품번호
Quantity int --재고수량
)
Go
--[1]SaveTable (재고테이블)에 1번, 2번 제품을 10개 넣어 놓음(가상)
Insert SaveTable values(1,10), (2,10)
Select *From [SaveTable]
--[2]구매가 한번 이루어지면 자동으로 재고테이블에서 감소시키는 트리거 생성
Create Trigger AutoSaveMinus --자동제거감소
ON [SellTable]
For Insert --구매 테이블에 데이터가 입력되는 순간
As
Update [SaveTable]
Set Quantity = Quantity -1
Print '재고테이블에서 1개 감소했습니다'
Go
--[3] SellTable(구매테이블)에 Insert문을 실행시켜 본다
Insert [SellTable] Values(1,1,1)
--[4] 트리거에 의해 재고테이블의 모든 필드값이 자동으로 감소됨을 알 수 있다 .
Select *From [SaveTable]
--[5]트리거를 수정해보자 : 구매개수만큼 줄이도록 수정
Alter Trigger [AutoSaveMinus] --자동제거감소
On[SellTable]
For Insert
As
Declare @ProductID Int
Declare @Quantity Int
Set @ProductID = 0
Set @Quantity = 0
Select *From [SellTable] --구매 테이블 출력
Select
@ProductID = ProductID,
@Quantity = Quantity
From Inserted --Inserted에 의해서 입력된 데이터 받아옴
Update [SaveTable]
Set Quantity = Quantity - @Quantity
Where ProductID = @ProductID
Go
Select *From [SellTable]
Select *From [SaveTable]
--[6] 1번 제품만을 1개 감소
Insert [SellTable] Values(1,1,1)
--[7] 2번 제품만 3개 감소
Insert [SellTable] Values(1,2,3)
--[8] 트리거 삭제
Drop Trigger [AutoSaveMinus]
--[!] [AutoSaveMinus]자동재고감소와 동일한 기능을 하는 입력 저장 프로시저
Create Procedure dbo.[ProcAutoSaveMinus] --자동재고감소프로시저
@CustomerID Int,
@ProductID Int,
@Quantity Int
As
Begin Tran
Insert [SellTable] Values(@CustomerID,@ProductID,@Quantity)
Update [SaveTable]
Set Quantity = Quantity - @Quantity
Where ProductID = @ProductID
Select *From [SaveTable]
Commit Tran
Go
Exec [ProcAutoSaveMinus] 1,2,3
Go
|