如何动态停止/触发存储过程中的触发器?

时间:2013-02-06 20:50:27

标签: tsql stored-procedures triggers sql-server-2008-r2

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

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

1 个答案:

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