每当我尝试通过.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
那么,有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
在发生故障转移的情况下,无论有没有保存点,都会回滚整个事务。我建议您在这里简单地删除不必要的复杂性。
不知道您的代码是否在此处过分简化,但您的catch块完全隐藏了错误。通常应该在THROW;
之后加上ROLLBACK
,以重新引发原始错误并终止proc执行。