【问题标题】:how to stop/fire trigger in stored procedure dynamically?如何动态停止/触发存储过程中的触发器?
【发布时间】:2013-01-22 05:02:27
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      相关资源
      最近更新 更多