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. Пересмотрите логику вложенных транзакций.
Ещё по этой СУБД
- 2714В базе данных уже есть объект с таким именем
- 601Не удалось продолжить сканирование с NOLOCK из-за перемещения данных
- 50000Пользовательская ошибка, вызванная через RAISERROR
- 1101Could not allocate a new page because of insufficient disk space in filegroup
- 3729Cannot DROP because it is being referenced by object
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths