接(一)
--觸發器示例2
/*建立觸發器[t_insert_捲菸銷售表],該觸發器較複雜。
說明: 每當[捲菸庫存表]發生 insert 動作,則引發該觸發器。
觸發器功能: 實現業務規則。
業務規則: 如果銷售的捲菸品牌不存在庫存或者庫存為零,則返回錯誤。
否則則自動減少[捲菸庫存表]中對應品牌捲菸的庫存數量和庫存金額。
*/if exists (select name from sysobjects where xtype = 』tr』 and name = 』t_insert_捲菸銷售表』)
drop trigger t_insert_捲菸銷售表
gocreate trigger t_insert_捲菸銷售表
on 捲菸銷售表
for insert
asbegin 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
sqlserver觸發器複習
create table a a1 int,a2 int create table b b1 int,b2 int insert into a values 1,0 insert into b values 1,0 create trigger tri update a2 a on a for up...
SQL server 之 觸發器
今天對觸發器研究了一下,之前的學習感覺挺朦朧的,今天鼓搗了一天,算是有了一點點了解,把學習的體會記錄了下來。常見的觸發器 觸發器的作用 自動化操作,減少了手動操作以及出錯的機率 現實工作中用的比較少,因為想讓他執行起來效率高很難 一 dml觸發器 insert delete update 不支援se...
SQLSERVER的觸發器
觸發器的定義 觸發器是一種特殊型別的儲存過程,他不同於前面介紹過的一般的儲存過程 在sql內部把觸發器看做是儲存過程但是不能傳遞引數 一般的儲存過程通過儲存過程名稱被直接呼叫,而觸發器主要是通過事件進行觸發而被執行.總的來說,觸發器是一種功能強大的工具,在表中資料發生變化時自動強制執行,觸發器還可以...