3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION
SQL ServerO 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.
Mais entradas deste banco
- 2714There is already an object named in the database
- 601Could not continue scan with NOLOCK due to data movement
- 50000Erro personalizado gerado com RAISERROR
- 1101Could not allocate a new page because of insufficient disk space in filegroup (não foi possível alocar uma nova página por falta de espaço em disco no filegroup)
- 3729Cannot DROP because it is being referenced by object (não é possível remover porque outro objeto o referencia)
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement (a transação snapshot falhou porque um comando DDL modificou o objeto)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (a constraint FOREIGN KEY pode causar ciclos ou vários caminhos em cascata)