Asutosha Ответов: 0

Способ разрешения подсчета транзакций после выполнения указывает на несоответствие числа операторов BEGIN и COMMIT. Предыдущее количество = 1, текущее значение счетчика = 0.


Привет,
У меня есть хранимая процедура, которая также вызывает много вложенных процедур.
Недавно я добавил транзакцию и получаю сообщение ниже

'
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.
'

Не могли бы вы предложить возможное предложение?
большое спасибо

Моя структура процедуры выглядит следующим образом

CREATE	Procedure [dbo].[My_Main_PROC]  
    @RequestId UNIQUEIDENTIFIER,
    @DOCUMENT XML
AS


*/
BEGIN
SET NOCOUNT ON;

DECLARE @transtate BIT
IF @@TRANCOUNT = 0
BEGIN
	SET @transtate = 1
	BEGIN TRANSACTION transtate
END

BEGIN TRY

......
......

EXEC [dbo].[PROC_FirstNestedPRoc]  ;

......
......

EXEC [dbo].[PROC_SecondNEstedProc]  ;


......
......

EXEC [dbo].[PROC_ThirdNestedPRoc] ;

....
.....

IF @transtate = 1 
        AND XACT_STATE() = 1
        COMMIT TRANSACTION transtate
END TRY
BEGIN CATCH

DECLARE @Error_Message VARCHAR(5000)
DECLARE @Error_Severity INT
DECLARE @Error_State INT

SELECT @Error_Message = ERROR_MESSAGE()
SELECT @Error_Severity = ERROR_SEVERITY()
SELECT @Error_State = ERROR_STATE()

   IF @transtate = 1 
   AND XACT_STATE() <> 0
   ROLLBACK TRANSACTION

RAISERROR (@Error_Message, @Error_Severity, @Error_State)

END CATCH
END


Что я уже пробовал:

Я попытался удалить транзакцию, она работает, но когда я применил транзакцию, произошла та же ошибка

ZurdoDev

Вероятно, у вас есть commit tran внутри одного из других хранимых процессов.

0 Ответов