3

假设我在数据库中有一个表 MyTab。我有一个触发器,例如,删除此表上的触发器。然后在存储过程中,我尝试从该表中删除数据,但只想为该删除停止删除触发器。之后,将扳机恢复正常。是否可以在存储过程中有代码,例如:

stop trigger on MyTab;
delete from MyTab where ...;
put the trigger back;
4

1 回答 1

4

如此处所述,您可以禁用和启用触发器,但我可能会将其放在 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可以保证我的事务被回滚,包括禁用触发器。

于 2013-02-06T20:52:52.300 回答