В моей хранимой процедуре я объявил параметр OUTPUT с именем @Stats
:
@Stats nvarchar(max) OUTPUT
В конце моей хранимой процедуры я присваиваю результаты запроса JSON выходному параметру:
SELECT @Stats = (SELECT * FROM JsonStats FOR JSON AUTO)
Если я выполню хранимую процедуру в SSMS, я получу данные JSON из @Stats
, как и ожидалось:
DECLARE @Param1 nvarchar(max) = '...'
DECLARE @Stats nvarchar(max)
EXEC MySP @Param1, @Stats OUTPUT
SELECT @Stats
Однако, когда я выполняю хранимую процедуру из кода C #, я получаю пустую строку:
SqlCommand cmd = new SqlCommand("MySP", conn)
{
CommandType = CommandType.StoredProcedure
};
var inputParam = new SqlParameter("@Param1", invoiceKeyListJson);
cmd.Parameters.Add(inputParam);
var outputParam = new SqlParameter("@Stats", SqlDbType.NVarChar, -1);
outputParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(outputParam);
cmd.ExecuteNonQuery();
string statsJson = outputParam.Value.ToString();
После запуска вышеуказанного кода, statsJson
пуст. Странно то, что если я жестко закодирую присвоение @Stats
произвольной строке в хранимой процедуре, statsJson
присваивается это значение.
Почему несоответствие в результатах между SSMS и C #? Что мне нужно сделать, чтобы вернуть данные JSON в C #?