定義:
如果一個觸發器在執行操作時引發了另一個觸發器,而這個觸發器又接着引發下一個觸發器,那麼這些觸發器就是嵌套觸發器。
實例:
--創建存儲過程:實現在新員工信息表(NewEmployee)中刪除信息時觸發員工信息表(Employee)添加相應新員工信息表中刪除的人員信息
create trigger t_del2
on NewEmployee
for delete
as
insert into Employee(員工編號,員工姓名,所在部門編號,所任職位,性別)
select 員工編號,員工姓名,所在部門編號,所任職位,性別
from deleted
--創建存儲過程:實現在員工信息表(Employee)中插入數據時部門信息表(DeptInfo)中的“部門人數”相應的增加
create trigger t_add
on Employee
for insert
as
update DeptInfo set 部門人數=部門人數+1
where 部門編號=(select 所在部門編號 from inserted)
--執行刪除操作:在新員工信息表(NewEmployee)中刪除一個人員
delete from NewEmployee where 員工編號=3
--觸發新員工信息表中員工編號爲的記錄被刪除
select * from NewEmployee where 員工編號=3
--觸發人員信息表中增加一條員工編號爲的信息
select * from Employee where 員工編號=3
--觸發部門信息表中相應的部門人數增加
select 部門人數 from DeptInfo where 部門編號='03'
注意:
嵌套觸發器如何工作
任何觸發器都可以包含影響另一個表的UPDATE、INSERT或DELETE語句。如果允許嵌套觸發器,修改表的觸發器可以激活第二個觸發器,它又激活第三個觸發器,依次類推。嵌套在安裝時啓用,但可以使用sp_config系統存儲過程禁止和重新啓用嵌套。
觸發器可以嵌套到32級,如果嵌套鏈中的任何觸發器建立無窮循環,超過最大嵌套級的觸發器被終止,並撤銷整個事務。嵌套觸發器可以用於多種功能,比如,建立由前一個觸發器影響的行的備份副本的存儲。使用嵌套觸發器時,應考慮以下因素和指導原則:
缺省情況下,嵌套觸發器配置選項是打開的。
在同一個觸發器事務中,一個嵌套觸發器不能激活兩次。觸發器不調用它自己來響應觸發器中對同一表的第二次更新。例如,如果表中一列上的UPDATE觸發器引起對另一列的更新,修改觸發器只激活一次,而不是重複激活。
由於觸發器是一個事務,在嵌套觸發器中的任何一級中的失敗都會取消整個事務,所有數據修改被撤銷。所以,在測試觸發器時,應該包括一條PRINT語句,這樣,你就可以確定故障發生的位置。