Сталкивались ли вы с этим исключением для хранимой процедуры, которая действительно имеет сбалансированный блок транзакций?
Я дважды проверил хранимую процедуру, и она имеет ровно одну 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 перед попыткой отката