Текущая транзакция не может быть зафиксирована и не может быть отменена до точки сохранения.Откатить всю транзакцию - PullRequest
0 голосов
/ 13 июня 2019

Я получаю следующее сообщение об ошибке случайно, когда пытаюсь выполнить описанную ниже хранимую процедуру через приложение ядра .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 голосов
/ 13 июня 2019

Откат всей транзакции с или без точки сохранения в случае сбоя.Я предлагаю вам просто удалить эту ненужную сложность здесь.

Не знаю, был ли ваш код слишком упрощен для публикации здесь, но ваш блок catch полностью скрывает ошибку.Обычно следует включить THROW; после ROLLBACK, чтобы повторно вызвать исходную ошибку и прекратить выполнение процедуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...