Solo habrá una conexión, es lo que se usa para ejecutar el procedimiento, sin importar la cantidad de comandos SQL dentro del procedimiento almacenado.
dado que no tiene una BEGIN TRANSACTION explícita en el procedimiento almacenado, cada instrucción se ejecutará por sí sola sin posibilidad de deshacer ningún cambio si hay algún error.
Sin embargo, si antes de llamar al procedimiento almacenado emite BEGIN TRANSACTION, todas las declaraciones se agrupan dentro de una transacción y pueden ser COMMITted o ROLLBACKed después de la ejecución del procedimiento almacenado.
Desde dentro del procedimiento almacenado, puede determinar si se está ejecutando dentro de una transacción al verificar el valor de la variable de sistema @@TRANCOUNT (Transact-SQL). Un cero significa que no hay transacción, cualquier otra cosa muestra el nivel de transacciones anidado en el que se encuentra. Dependiendo de la versión del servidor SQL, también puede usar XACT_STATE (Transact-SQL).
Si hace lo siguiente:
BEGIN TRANSACTION
EXEC my_stored_procedure_with_5_statements_inside @Parma1
COMMIT
todo dentro del procedimiento está cubierto por la transacción, los 6 estados (EXEC es una declaración cubierto por la transacción, 1 + 5 = 6). Si hace esto:
BEGIN TRANSACTION
EXEC my_stored_procedure_with_5_statements_inside @Parma1
EXEC my_stored_procedure_with_5_statements_inside @Parma1
COMMIT
todo dentro de las dos llamadas a procedimientos están cubiertos por la transacción, los 12 estados (los 2 EXEC son a la vez comunicado cubierto por la transacción, 1 + 5 + 1 + 5 = 12).
Entonces, ¿dices que, en efecto, cada instrucción dentro del procedimiento almacenado forma su propia transacción, es decir, se ejecuta un procedimiento almacenado con cinco instrucciones en cinco transacciones? – Sleepless
Si no hay ninguna transacción en el procedimiento o fuera del procedimiento, entonces cada declaración en el procedimiento es una unidad de trabajo autónoma. Realmente no hay transacciones, ya que no puedes comprometer ni tirar, luego retroceder. Si ajusta una llamada a procedimiento en una transacción, todo dentro del procedimiento se ejecutará dentro de esa única transacción. –
¡Gracias! Por cierto, ¿cómo haces ese formato de código en el que obviamente fallé? – Sleepless