-- 트리거(방아쇠) : 구매(주문),재고테이블: 한명하나의상품을구매하면, 재고테이블에서
-- 해당재고량을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
'DataBase > MS SQL' 카테고리의 다른 글
MsSql - DB Log 파일 용량 줄이기 (0) | 2010.08.31 |
---|---|
MS-SQL 프로시저에서 If문 말고 다른거 써보자 (0) | 2010.06.17 |
47.MS_SQL 2008 - ToDoList (0) | 2009.10.01 |
46.MS_SQL 2008 - 도시락 주문프로그램 - 최종 (0) | 2009.09.21 |
45.MS_SQL 2008 - 도시락 주문 테이블 (0) | 2009.09.21 |
Comments