假设我在数据库中有一个表MyTab。我有一个触发器,例如,删除此表上的触发器。 然后在存储过程中,我尝试从此表中删除数据,但只想停止删除触发器。之后,将扳机恢复正常。是否可以在存储过程中使用代码,如:
stop trigger on MyTab;
delete from MyTab where ...;
put the trigger back;
答案 0 :(得分:4)
如上所述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保证我的事务被回滚,包括禁用触发器。