DBAtlas · Atlas de operações de banco de dados

3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION

SQL Server

O que significa?

Um COMMIT TRANSACTION foi executado, mas não há um BEGIN TRANSACTION aberto correspondente. Nenhuma transação para commit foi encontrada porque a contagem de transações (@@TRANCOUNT) é zero.

Por que acontece?

Uso desbalanceado de BEGIN/COMMIT/ROLLBACK, a transação já desfeita (rollback) após um erro, gerenciamento incorreto das contagens de transações aninhadas, ou chamada de COMMIT novamente após ROLLBACK em um bloco CATCH.

Como resolver

Balanceie o número de instruções BEGIN e COMMIT. Verifique @@TRANCOUNT antes do commit (IF @@TRANCOUNT > 0 COMMIT). Em TRY...CATCH, em caso de erro faça ROLLBACK com base em XACT_STATE()/@@TRANCOUNT e evite um COMMIT desnecessário. Revise a lógica de transações aninhadas.

Abrir no DBAtlas →

Mais entradas deste banco