Sql Server 觸發器 二

2021-08-25 20:35:59 字數 1781 閱讀 9122

接(一)

--觸發器示例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內部把觸發器看做是儲存過程但是不能傳遞引數 一般的儲存過程通過儲存過程名稱被直接呼叫,而觸發器主要是通過事件進行觸發而被執行.總的來說,觸發器是一種功能強大的工具,在表中資料發生變化時自動強制執行,觸發器還可以...