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