Будет только одно соединение, это то, что используется для запуска процедуры, независимо от количества команд SQL в хранимой процедуре.
, поскольку в хранимой процедуре нет явного BEGIN TRANSACTION, каждый оператор будет выполняться сам по себе без возможности откатить какие-либо изменения в случае ошибки.
Однако, если вы перед вызовом хранимой процедуры выполняете BEGIN TRANSACTION, все операторы группируются в транзакции и могут после выполнения хранимой процедуры быть либо COMMITted, либо ROLLBACKed.
Из хранимой процедуры вы можете определить, выполняете ли вы внутри транзакции, проверив значение системной переменной @@ TRANCOUNT (Transact-SQL) . Ноль означает, что транзакции отсутствуют, все остальное показывает, сколько вложенных уровней транзакций у вас есть. В зависимости от версии вашего сервера sql вы можете использовать XACT_STATE (Transact-SQL) .
Если вы делаете следующее:
BEGIN TRANSACTION
EXEC my_stored_procedure_with_5_statements_inside @Parma1
COMMIT
все в процедуре покрыто транзакцией, все 6 операторов (EXEC - оператор, охватываемый транзакцией, 1 + 5 = 6). Если вы сделаете это:
BEGIN TRANSACTION
EXEC my_stored_procedure_with_5_statements_inside @Parma1
EXEC my_stored_procedure_with_5_statements_inside @Parma1
COMMIT
все в двух вызовах процедур охватывается транзакцией, все 12 операторов (оба оператора EXEC являются оператором, охватываемым транзакцией, 1 + 5 + 1 + 5 = 12).