DBAtlas · Атлас эксплуатации баз данных

3902: Для запроса COMMIT TRANSACTION нет соответствующего BEGIN TRANSACTION

SQL Server

Что это значит?

Выполнен COMMIT TRANSACTION, но соответствующего открытого BEGIN TRANSACTION нет. Транзакция для фиксации не найдена, поскольку счётчик транзакций (@@TRANCOUNT) равен нулю.

Почему возникает?

Несбалансированное использование BEGIN/COMMIT/ROLLBACK, транзакция уже откатана после ошибки, неверное управление счётчиком вложенных транзакций или повторный вызов COMMIT после ROLLBACK в блоке CATCH.

Как исправить

Сбалансируйте число операторов BEGIN и COMMIT. Проверяйте @@TRANCOUNT перед фиксацией (IF @@TRANCOUNT > 0 COMMIT). В TRY...CATCH при ошибке выполняйте ROLLBACK на основе XACT_STATE()/@@TRANCOUNT и не допускайте лишнего COMMIT. Пересмотрите логику вложенных транзакций.

Открыть в DBAtlas →

Ещё по этой СУБД