是否可以在不抑制错误的情况下回滚SQL Server事务?

Kuy*_*nda 3 sql-server sql-server-2008-r2

此StackOverflow答案提供了一种使用TRY CATCH ROLLBACK TRANSACTION的优雅方法,但它可以抑制错误信息.

有没有办法回滚一个不会抑制导致回滚的错误的事务?

这是基于上述方法的示例T-SQL脚本:

DECLARE @Table TABLE ( ID INT PRIMARY KEY )

BEGIN TRY

    BEGIN TRANSACTION

        INSERT INTO @Table VALUES (1), (1)

    COMMIT TRANSACTION

END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
    ROLLBACK TRANSACTION

END CATCH;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Not*_*tMe 5

在Catch语句中获取错误代码和消息.然后再简单地升起它.以下是一些示例.

http://technet.microsoft.com/en-us/library/ms175976.aspx

(根据评论中的每个RBarryYoung)

在该CATCH条款中,只需使用THROW

  • 它们不会在链接中显示它,但在SQL Server的更高版本中,您可以在`CATCH`中使用通用的"THROW",而不必使用`RAISERROR ...`重新指定它. (4认同)