觸發器是一種特殊的儲存過程,只能由事件驅動呼叫,而無法直接呼叫。
當對資料庫的相關物件(資料庫、表、檢視)進行某些特定的操作時,資料庫會自動呼叫相應的觸發器。無需再執行增刪改或儲存過程的操作,讓程式更自動化。
3.1 觸發器的觸發方式
sql server 按觸發器被啟用的時機可分為後觸發和替代觸發兩種觸發方式
引起觸發器執行的修改語句若違反了某種約束,後觸發方式不會啟用觸發器,替代觸發方式會啟用觸發器
(1)後觸發
當引起觸發器執行的修改語句執行,並通過各種約束檢查後,才執行觸發器,這種觸發方式稱為後觸發
建立這種觸發器使用after或for關鍵字
後觸發只能建立在表上,而不能建立在檢視上
(2) 替代觸發
當執行可引起觸發器執行的修改語句時,停止該修改語句的執行,僅執行其觸發器,這種觸發方式稱為替代觸發
建立這種觸發器使用instead of關鍵字
替代觸發可建立在表上,也可以建立在檢視上
3.2 啟用觸發器時的臨時表
每個觸發器被啟用時,系統都為它自動建立兩個臨時表
inserted表:需要新增或更新後的資料
deleted表:需要刪除或更新前的資料
這兩個表的結構與被啟用觸發器的表結構相同
觸發器執行完成後,這兩個表將被自動刪除
3.3 示例一:替代觸發
createtrigger 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 示例二:後觸發
createtrigger 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
'訂單日期不能修改
'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語句進行複雜的邏輯處理,基於乙個表建立,但是可以對多個表進行操作,因此常常用...