2
假設我在數據庫中有一個MyTab表。我有一個觸發器,例如,刪除此表上的觸發器。 然後在一個存儲過程中,我嘗試從這個表中刪除數據,但是隻想爲這個刪除操作停止刪除觸發器。之後,將扳機恢復正常。是否有可能有像在存儲過程的代碼:如何在存儲過程中動態地停止/觸發觸發器?
stop trigger on MyTab;
delete from MyTab where ...;
put the trigger back;
假設我在數據庫中有一個MyTab表。我有一個觸發器,例如,刪除此表上的觸發器。 然後在一個存儲過程中,我嘗試從這個表中刪除數據,但是隻想爲這個刪除操作停止刪除觸發器。之後,將扳機恢復正常。是否有可能有像在存儲過程的代碼:如何在存儲過程中動態地停止/觸發觸發器?
stop trigger on MyTab;
delete from MyTab where ...;
put the trigger back;
如前所述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保證我的事務回滾,包括觸發器的禁用。