SQL觸發器例項講解學習(2)

2021-05-24 08:39:18 字數 2539 閱讀 4670

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表上的觸發器再觸...