一、觸發器是一種特殊的存儲過程,它不能被顯式地調用,而是在往表中插入記錄﹑更新記錄或者刪除記錄時被自動地激活。
二、SQL Server爲每個觸發器都創建了兩個專用表:Inserted表和Deleted表。這兩個表由系統來維護,它們存在於內存中而不是在數據庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。觸發器執行
完成後,與該觸發器相關的這兩個表也被刪除
1、Deleted表存放由於執行Delete或Update語句而要從表中刪除的所有行。
2、Inserted表存放由於執行Insert或Update語句而要向表中插入的所有行。
三、Instead of 和After觸發器
1、Instead of觸發器用於替代引起觸發器執行的T-SQL語句。除表之外,Instead of 觸發器也可以用於視圖,用來擴展視圖可以支持的更新操作。
2、After觸發器在一個Insert,Update或Deleted語句之後執行,進行約束檢查等動作都在After觸發器被激活之前發生。After觸發器只能用於表。
3、一個表或視圖的每一個修改動作(insert,update和delete)都可以有一個instead of 觸發器,一個表的每個修改動作都可以有多個After觸發器。
四、insert觸發器、update觸發器、delete觸發器
SELECT*FROM [a].[dbo].[test]
1、insert觸發器
create trigger test_insert
on test
after insert
as
if(exists (select * from inserted where inserted.c<>'100'))
begin
print 'error:數據不合法,不能插入'
rollback transaction
end
insert into test(ida,b,c,d,e)values('007','f','10','d','e')
insert into test(ida,b,c,d,e)values('007','f','100','d','e')
插入數據成功!
2、update觸發器
create trigger test_update
on test
after update
as
if(exists (select * from inserted where inserted.c<>'100'))
begin
print 'error:數據不合法,不能更新'
rollback transaction
end
3、delete觸發器
create trigger test_delete //alter trigger test_delete
on test
after delete
as
if(exists (select * from deleted where deleted.c<>'100'))
begin
print 'error:數據不合法,不能更新'
rollback transaction
end