РЕДАКТИРОВАТЬ: Я думаю, что я вижу проблему сейчас.SQL Server не назначает выходные параметры до завершения процедуры.Пока второй выбор потоковый, выходной параметр не будет возвращен клиенту.
Теперь я предполагаю, что вы вызываете ExecuteNonQuery
, который не запрашивает набор результатов.SQL Server остановит процедуру в начале второго выбора.
Если вы измените свой код C # на ExecuteReader()
, вы можете получить выходной параметр после того, как считыватель будет сделан:
using (var read = yourCommand.ExecuteReader())
while (read.Read());
// You should be able to access the output parameter here
Если вы добавите больше потоковых селекторов в процедуру:
SELECT * FROM SomeTable where id = 1;
SELECT 'hello world';
SELECT * FROM SomeTable where null in (1,2,3);
Вы должны получить их всех с помощью NextResult
:
using (var read = yourCommand.ExecuteReader()) {
do {
while (read.Read());
} while (read.NextResult());
}
перед выходным параметромбудет назначен.Причина этого заключается в том, что значение выходного параметра может зависеть от последнего выбора.Таким образом, SQL Server не знает правильного значения до завершения выполнения всей хранимой процедуры.