假设我在数据库中有一个表 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;
如此处所述,您可以禁用和启用触发器,但我可能会将其放在 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;
上面的脚本会抛出一个错误,但不会禁用触发器,因为设置 xact_abort on可以保证我的事务被回滚,包括禁用触发器。