2013-02-06 55 views
2

假設我在數據庫中有一個MyTab表。我有一個觸發器,例如,刪除此表上的觸發器。 然後在一個存儲過程中,我嘗試從這個表中刪除數據,但是隻想爲這個刪除操作停止刪除觸發器。之後,將扳機恢復正常。是否有可能有像在存儲過程的代碼:如何在存儲過程中動態地停止/觸發觸發器?

stop trigger on MyTab; 
delete from MyTab where ...; 
put the trigger back; 

回答

3

如前所述here,您可以禁用和啓用觸發器,雖然我可能把這個在一個try-catch和/或交易,所以你不要」不要因爲錯誤而禁用觸發器。

例如:

set xact_abort on; -- Auto-rollback on any error 
begin transaction; 

    alter table MyTab disable trigger TR_MyTab_Delete; 

    delete from MyTab where 1/0 = 1; -- Causes div by zero error 

    alter table MyTab enable trigger TR_MyTab_Delete; -- Won't run becuase of above error 

commit; 

上面的腳本將拋出一個錯誤,但不會離開觸發禁用,因爲set xact_abort on保證我的事務回滾,包括觸發器的禁用。