在Sql Server 2008中,我被要求编写触发器,以便在我构建的应用程序中执行各种类型的日志记录。问题是我的SQL生锈了,有时我在触发器中放入的一些事情会出现意外错误。我打算最终解决所有错误,但与此同时我的触发器代码正在破坏我的应用程序,因为如果触发器意外失败,它会回滚更新或插入触发它破坏应用程序的部分。我尝试在触发器代码周围放置一个try catch块,但似乎没有做我习以为常的其他语言,它会回滚原始事务,即使这样。
是否有人知道你是否可以编写一个触发器,当它发生错误时它会正常地死掉并让触发它的事务完成?
答案 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设置为关闭以避免自动回滚当前事务。