43. 트리거(Trigger)
.NET프로그래밍/SQL Server 2008 2009. 9. 18. 11:30 |-- 트리거(방아쇠) : 구매(주문),재고테이블: 한명하나의상품을구매하면, 재고테이블에서
-- 해당재고량을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
'.NET프로그래밍 > SQL Server 2008' 카테고리의 다른 글
(실습) 도시락 프로그램(SQL Server레벨에서...) (0) | 2009.09.21 |
---|---|
44. ERwin을 설치하여 그림그리기(= 데이터베이스 모델링) (0) | 2009.09.18 |
42. 트랜잭션(Transaction) (0) | 2009.09.18 |
41. Output과 Return 키워드 (0) | 2009.09.18 |
40. Select문 기타키워드(Distinct / Case 등등) (0) | 2009.09.17 |