盡管遞歸觸發器比較復雜而且難於管理,但是它使用起來非常方便。本文中,我們將簡單描述有關遞歸觸發器的內容,並提供了使用它們的時候必須記住的一些有用的技巧。
遞歸觸發器能夠在原始列表中或者在其他列表中激發其他的觸發器。這兩種類型的觸發器遞歸分為直接的或間接的遞歸。當一個觸發器本身起作用時,一個直接的遞歸就生成。當一個觸發器以其他列表作用時,一個間接的遞歸就生成了。
當使用遞歸觸發器時請記住的內容
觸發器遞歸局限於32位。如果一個觸發器以無限循環或超過32位,觸發器就會終止數據交換並停留在開始處。
如果一個觸發器操作ROLLBACK TRANSACTION,將不會執行其他的觸發器。
嚴格地檢測遞歸觸發器。未經檢測的遞歸觸發器將對數據操作帶來很大的危害。
超過32位的觸發器是一個無實際意義的觸發器。這樣應該考慮被控制的邏輯循環或其他程序終止檢查,這對遞歸觸發器的保護很有作用的。
不能控制觸發器初始更改的地方。所以你的列表必須以一個特定的方式來更新,你不能使用遞歸觸發器。你只能設置第一個和最後一個觸發器。
間接遞歸在缺省情況下為ON。如果想把它變為OFF,必須使用sp_configure來設置嵌套觸發器選擇。
直接遞歸在缺省情況下是OFF。可以通過使用ALTER DATABASE聲明把它變為ON。以下范例將直接遞歸變成dbName數據庫。
USE master
GO
ALTER DATABASE dbName
SET RECURSIVE_TRIGGERS ON
GO