¿Ha encontrado esta excepción para un procedimiento almacenado que sí tiene un bloque de transacción balanceado?SQLException - Transaction BEGIN/COMMIT mismatch
Me doble comprobado el procedimiento almacenado y tiene exactamente un TRANSACTION BEGIN
y cooresponding TRANSACTION END
error registrados Info
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]`
adicional
El procedimiento almacenado contiene EXEC
llamadas a otro procedimiento almacenado. ¿Un par de transacciones no coincidentes aquí causaría que el error salga a la superficie de esta manera?
Actualización Resulta que hubo una violación de una restricción de clave externa dentro del procedimiento almacenado anidado. La transacción externa no incluía un bloque Try/Catch y tenía SET XACT_ABORT ON
especificado, que no manejaba adecuadamente ni una confirmación ni una retrotracción. También se agregó una marca para @@ TransactionCount> 0 antes de intentar una reversión
¡La restricción de clave foránea fue de gran ayuda para mí aquí! Me encontré con un problema similar con sqlalchemy de python –