在觸發器的應用中,常會遇到這種情況,即被觸發的觸發器試圖更新與其相關聯的原始的目標表,從而使觸發器被無限循環地觸發。對於該種情況,不同的數據庫產品提供了不同的解決方案有些DBMS 對一個觸發器的執行過程采取的動作強加了限制,有些DBMS 提供了內嵌功能,允許一個觸發器主體對正在進行的觸發器所處的嵌套級別,另一些DBMS 提供了一種系統設置,控制是否允許串聯的觸發器處理,最後一些DBMS 對可能觸發的嵌套觸發器級別的數目進行限制。在MS SQL Server 中,這種能觸發自身的觸發器被稱為遞歸觸發器。對它的控制是通過限制可能觸發的嵌套觸發器級別的數目進行限制的,另外,通過是否允許觸發嵌套觸發器也能實現對它的控制。
在MS SQL Server 中,除非遞歸觸發器的數據庫選項被設置,否則,一個觸發器不會被遞歸觸發。有兩個類型的遞歸觸發器。
直接遞歸:即當一個觸發器觸發時,執行的動作又引起同一個觸發器的觸發,例如,某一更新操作引起某一表上的觸發器被觸發,該觸發器又執行更新操作,從而又觸發了該觸發器;
間接遞歸:即當一個觸發器觸發時,執行的動作又引起另外一個表的觸發器被觸發,第二個觸發器又觸發第一個觸發器。
同時觸發器也可能和游標一起使用,從而使其功能大大增強。下面我們將給出一個例子,在該例子中。我們使用了游標和遞歸觸發器,希望使讀者對觸發器有更全面的了解。