블로그 이미지
Magic_kit
study 관련자료를 한곳으로 자기 개발 목적으로 재태크 재무 관리 목적으로 일상생활의 팁을 공유 하기 위하여 블로그를 개설 하였습니다.

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Category

Recent Post

Recent Comment

Archive

2009. 9. 18. 11:09 .Net Project/WindowServer2008
반응형

--트리거(방아쇠) : 구매(주문), 재고테이블 :
--한명 하나의 상품을 구매하면, 재고 테이블에서
-- 해당 재고량을 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  


 


반응형
posted by Magic_kit