且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在Try Catch Block中提交

更新时间:2023-11-29 14:43:10

我建议使用第一个构造,在SQL 2012及更高版本中,使用THROW重新引发原始错误。此外,将SET XACT_ABORT_ON添加到proc的下注中以确保在客户端超时的情况下立即回滚事务,因为在这种情况下不执行CATCH
块。

I suggest the first construct and, in SQL 2012 and later, use THROW to re-raise the original error. Also, add SET XACT_ABORT_ON to the betting of the proc to ensure the transaction is rolled back immediately in the event of a client timeout since the CATCH block is not executed in that case.

CREATE PROCEDURE DummyProc 
AS
SET XACT_ABORT ON;
BEGIN TRY
      BEGIN TRANSACTION;
      INSERT sometable(a, b) VALUES (@a, @b);
      INSERT sometable(a, b) VALUES (@b, @a);
      COMMIT TRANSACTION;
END TRY
BEGIN CATCH
      IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
      THROW;
END CATCH;
GO