1

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

有谁知道/如果您可以编写一个触发器,当它出错时它会优雅地死去并让触发它的事务完成?

4

1 回答 1

3

您可以将触发器主体代码包含在try-catch 块中。

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设置为 off 以避免自动回滚当前事务。

sql 小提琴示例

于 2013-07-24T12:59:59.067 回答