2013-02-06 57 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保证我的事务回滚,包括触发器的禁用。