TRIGGER
TRIGGER 是一種特殊的預存程序,雖然也是由使用者自訂的可程式化物件,但是它不可以直接被使用者執行。
它必須建構在 table 或 view 的特定事件中,如:INSERT, UPDATE, DELETE。
當這些事件發生時,才會自動引發 TRIGGER 執行。
語法
要建立觸發程序,要使 CREATE TRIGGER 陳述式。
1
2
3
4
5
create trigger 觸發程序名稱
on 資料表名稱 --觸發器是針對哪個資料表
for 觸發程序事件語法(insert, update, delete)
as
--SQL語法
範例
製作出只在10:00~17:59之間對顧客清單執行insert、update、delete語法的觸發程序
1
2
3
4
5
6
7
8
9
10
--製作出只在10:00~17:59之間對顧客清單執行insert、update、delete語法的觸發程序
create trigger tri_test2
on 客戶清單
for insert, update, delete
as
if datepart(HH, getdate()) < 10 or datepart(HH,getdate()) >= 18
begin
raiserror('非營業時間不能更新資料。', 16, 1) --定義使用者錯誤
rollback transaction --讓資料表異動成為無效
end
raiserror定義使用者錯誤rollback transaction讓資料表異動成為無效(回復到異動前的狀態)
刪除客戶ID=1的資料
1
2
3
4
5
6
7
8
9
10
11
--刪除客戶ID=1的資料
delete from 客戶清單 where 客戶ID = 6
/* 執行結果:
訊息 50000,層級 16,狀態 1,程序 tri_test2,行 10 [批次開始行 13]
非營業時間不能更新資料。
訊息 3609,層級 16,狀態 1,行 14
交易在觸發程序中結束。已中止批次。
*/
MSDN - CREATE TRIGGER (Transact-SQL)
MSDN - RAISERROR (Transact-SQL)
MSDN - ROLLBACK TRANSACTION (Transact-SQL)
vito-note - Trigger
SQL Server 使用触发器写log(格式参考)
[SQL] 觸發程序 (Trigger)