next--
觸發器示例 2
/* 建立觸發器
[t_insert_
捲菸銷售表
],該觸發器較複雜。
說明 :
每當 [
捲菸庫存表
]發生insert
動作,則引發該觸發器。
觸發器功能:
實現業務規則。
業務規則
: 如果銷售的捲菸品牌不存在庫存或者庫存為零,則返回錯誤。
否則則自動減少
[捲菸庫存表
]中對應品牌捲菸的庫存數量和庫存金額。
*/ if exists (select name from sysobjects where xtype = 』tr』 and name = 』t_insert_
捲菸銷售表』)
drop trigger t_insert_
捲菸銷售表 go
create trigger t_insert_
捲菸銷售表
on 捲菸銷售表
for insert as
begin transaction --
檢查資料的合法性:銷售的捲菸是否有庫存,或者庫存是否大於零
if not exists (
select
庫存數量
from
捲菸庫存表
where
捲菸品牌
in (select
捲菸品牌
from inserted) )
begin --
返回錯誤提示
raiserror(』
錯誤!該捲菸不存在庫存,不能銷售。
』,16,1) --
回滾事務
rollback
return
endif exists (
select
庫存數量
from
捲菸庫存表
where
捲菸品牌
in (select
捲菸品牌
from inserted) and
庫存數量
<= 0 )
begin --
返回錯誤提示
raiserror(』
錯誤!該捲菸庫存小於等於
0,不能銷售。
』,16,1) --
回滾事務
rollback
return
end --
對合法的資料進行處理 --
強制執行下列語句,保證業務規則
update
捲菸銷售表
set
銷售金額
= 銷售數量
* 銷售單價
where
捲菸品牌
in (select
捲菸品牌
from inserted)
declare @
捲菸品牌
varchar(40)
set @
捲菸品牌
= (select
捲菸品牌
from inserted)
declare @
銷售數量
money
set @
銷售數量
= (select
銷售數量
from inserted)
update
捲菸庫存表
set
庫存數量
= 庫存數量
- @銷售數量,
庫存金額
= (庫存數量
- @銷售數量
)* 庫存單價
where
捲菸品牌
= @ 捲菸品牌
commit transaction go
--請大家自行跟蹤
[捲菸庫存表 ]和
[捲菸銷售表
]的資料變化。
--針對
[捲菸銷售表
],插入第一條測試資料,該資料是正常的。
insert into
捲菸銷售表
(捲菸品牌
,購貨商
,銷售數量
,銷售單價
,銷售金額 )
select 』
紅塔山新勢力
』,』某購貨商
』,10,12,1200 go
--針對 [
捲菸銷售表
],插入第二條測試資料,該資料
銷售金額
不等於銷售單價
* 銷售數量。
--觸發器將自動更正資料,使
銷售金額 等於
銷售單價
* 銷售數量。
insert into
捲菸銷售表
(捲菸品牌
,購貨商
,銷售數量
,銷售單價
,銷售金額 )
select 』
紅塔山人為峰
』,』某購貨商
』,10,22,2000 go
SQL觸發器例項講解
sql觸發器例項1 定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。我為什麼要使用觸發器?比如,這麼兩個表 create table ...
SQL 觸發器例項
sql觸發器例項1 定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。我為什麼要使用觸發器?比如,這麼兩個表 create table ...
SQL觸發器例項
2 建立觸發器 根據需求分析,為bbs type表 bbs lanmu表 bbs topic表分別建立after觸發器,該觸發器由delete事件觸發。建立在這3個表之上的觸發器之間是巢狀觸發的關係,即bbs type表上的觸發器觸發bbs lanmu表上的觸發器,bbs lanmu表上的觸發器再觸...