資料庫系列之T SQL(觸發器)

2022-02-05 02:00:30 字數 1658 閱讀 3096

觸發器是一種特殊的儲存過程,只能由事件驅動呼叫,而無法直接呼叫。

當對資料庫的相關物件(資料庫、表、檢視)進行某些特定的操作時,資料庫會自動呼叫相應的觸發器。無需再執行增刪改或儲存過程的操作,讓程式更自動化。

3.1 觸發器的觸發方式

sql server 按觸發器被啟用的時機可分為後觸發和替代觸發兩種觸發方式

引起觸發器執行的修改語句若違反了某種約束,後觸發方式不會啟用觸發器,替代觸發方式會啟用觸發器

(1)後觸發

當引起觸發器執行的修改語句執行,並通過各種約束檢查後,才執行觸發器,這種觸發方式稱為後觸發

建立這種觸發器使用after或for關鍵字

後觸發只能建立在表上,而不能建立在檢視上

(2) 替代觸發

當執行可引起觸發器執行的修改語句時,停止該修改語句的執行,僅執行其觸發器,這種觸發方式稱為替代觸發

建立這種觸發器使用instead of關鍵字

替代觸發可建立在表上,也可以建立在檢視上

3.2 啟用觸發器時的臨時表

每個觸發器被啟用時,系統都為它自動建立兩個臨時表

inserted表:需要新增或更新後的資料

deleted表:需要刪除或更新前的資料

這兩個表的結構與被啟用觸發器的表結構相同

觸發器執行完成後,這兩個表將被自動刪除

3.3 示例一:替代觸發

create

trigger tri_dropcustomer on

customers

instead

ofdelete

asdelete

from

orders

where customerid=

(

select customerid from

deleted)

delete

from

customers

where customerid=

(

select customerid from

deleted)

go

3.4 示例二:後觸發

create

trigger tri_updateorderdate on

orders

after

update

asdeclare

@oldorderdate

datetime

declare

@neworderdate

datetime

select

@oldorderdate

=orderdate from

deleted

select

@neworderdate

=orderdate from

inserted

if@oldorderdate

<>

@neworderdate

begin

print

'訂單日期不能修改

'rollback

transaction

endgo

T SQL資料庫 建立觸發器

觸發器 create trigger islateradvance on dbo.staffrecord after insert asbegin declare timemorning time 0 08 00 00 declare timeafternoon time 0 18 00 00 de...

資料庫之觸發器

觸發器 看到這個名字總是會想到數電中學過的觸發器,有輸入端和輸出端,根據電平的高低來觸發。資料庫中的觸發器是個特殊的儲存過程,主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名稱而被直接呼叫。作用 使用t sql語句進行複雜的邏輯處理,基於乙個表建立,但是可以對多個表進行操作,因此常常用...

資料庫之觸發器

觸發器 看到這個名字總是會想到數電中學過的觸發器,有輸入端和輸出端,根據電平的高低來觸發。資料庫中的觸發器是個特殊的儲存過程,主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名稱而被直接呼叫。作用 使用t sql語句進行複雜的邏輯處理,基於乙個表建立,但是可以對多個表進行操作,因此常常用...