当前事务无法提交,也不能回滚到保存点。回滚整个交易

时间:2019-06-13 09:24:33

标签: azure asp.net-core stored-procedures azure-sql-database

每当我尝试通过.net核心应用程序执行以下存储过程时,都会随机得到以下错误消息。

错误消息:

  

System.Data.SqlClient.SqlException(0x80131904):当前事务无法落实,也不能回滚到保存点。回滚整个交易。

存储过程:

ALTER PROCEDURE [dbo].[USP_UpdateInfo] (@xx NVARCHAR(50),
            @yy NVARCHAR(200),@Id int, @ab NVARCHAR(max),
            @ac int,
            @ad NVARCHAR(200), @ae NVARCHAR(200),@af NVARCHAR(100),
            @ag NVARCHAR(100),@zz NVARCHAR(MAX), @DateTime DATETIME)
  AS
   BEGIN
BEGIN TRANSACTION;
SAVE TRANSACTION UpdateInfo;
BEGIN TRY
    --First update 
    UPDATE XXTable
    SET XX = @xx
    WHERE YY=@yy;

    --Update the XXTable object with updated information 
    UPDATE XXTable
    SET ZZ = @zz,
    AB = @ab,
    AC= @ac,
    AD= @ad,
    AE= @ae,
    AF= @af,
    AG= @ag,
    DateTime= @DateTime
    WHERE Id=@Id;

END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
    BEGIN
        ROLLBACK TRANSACTION UpdateInfo; -- rollback to MySavePoint
    END
END CATCH
COMMIT TRANSACTION  

END

那么,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在发生故障转移的情况下,无论有没有保存点,都会回滚整个事务。我建议您在这里简单地删除不必要的复杂性。

不知道您的代码是否在此处过分简化,但您的catch块完全隐藏了错误。通常应该在THROW;之后加上ROLLBACK,以重新引发原始错误并终止proc执行。