SQLException - Несоответствие транзакции BEGIN / COMMIT

Вы сталкивались с этим исключением для хранимой процедуры, которая действительно имеет сбалансированный блок транзакции?

Я дважды проверил хранимую процедуру и он имеет ровно один TRANSACTION BEGIN и соответствующий TRANSACTION END

Зарегистрированная ошибка

SqlException - Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0.  The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. - Delete failed - stack:    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)     at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)     at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)     at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)     at System.Data.SqlClient.S ... [Rest of stack trace truncated by logging system]`

Дополнительная информация

Хранимая процедура действительно содержит EXEC вызовов другой хранимой процедуры. Оказывается, что во вложенной хранимой процедуре произошло нарушение ограничения внешнего ключа. Внешняя транзакция не включала блок Try / Catch и была указана SET XACT_ABORT ON , что неправильно обрабатывало ни фиксацию, ни откат. Также добавлена ​​проверка @@ TransactionCount> 0 перед попыткой отката

6
задан Chris Ballance 30 September 2010 в 18:09
поделиться