防止sql触发器在出错时回滚原始事务

时间:2013-07-24 12:36:07

标签: sql sql-server-2008

在Sql Server 2008中,我被要求编写触发器,以便在我构建的应用程序中执行各种类型的日志记录。问题是我的SQL生锈了,有时我在触发器中放入的一些事情会出现意外错误。我打算最终解决所有错误,但与此同时我的触发器代码正在破坏我的应用程序,因为如果触发器意外失败,它会回滚更新或插入触发它破坏应用程序的部分。我尝试在触发器代码周围放置一个try catch块,但似乎没有做我习以为常的其他语言,它会回滚原始事务,即使这样。

是否有人知道你是否可以编写一个触发器,当它发生错误时它会正常地死掉并让触发它的事务完成?

1 个答案:

答案 0 :(得分:2)

您可以将触发器正文代码括在try-catch block

CREATE TRIGGER tg
ON tt
AFTER DELETE
AS
    set xact_abort off; 
    BEGIN TRY
         sql_statements
    END TRY
    BEGIN CATCH
          dies gracefully
    END CATCH;

请务必将xact_abort设置为关闭以避免自动回滚当前事务。

sql fiddle sample