実際にバランスの取れたトランザクション ブロックを持つストアド プロシージャでこの例外が発生しましたか?
ストアド プロシージャを再確認したところ、正確に 1 つの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 のチェックを追加しました