Я хочу знать, возможно ли, чтобы хранимая процедура TSQL возвращала как набор результатов, так и выходной параметр.
create procedure uspReadMyXmlInformation(@myXmlDoc xml, @myProductNum varchar(18) output) as
begin
set nocount on;
declare @myXmlContent table(MyOrderId varchar(12) not null
,CreatedAt datetime not null)
insert into @myXmlContent
select x.c.value('MyOrderID[1]', 'varchar(12)')
x.c.value('CreatedAt[1]', 'datetime')
from @myXmlDoc.nodes('MyRootNodeName/MyChildNodeName') x(c)
set @myProductNum='MyProductNum'
select *
from @myXmlContent
return;
end
Итак, здесь происходит то, что я могу либо получить результирующий набор, когда я удаляю выходной параметр, либо я получаю выходной параметр, а результирующий набор всегда пуст (0=count(*)
).
В любом случае я могу получить оба с помощью одной и той же хранимой процедуры, или мне лучше разделить их?
Я думаю, что это выполнимо из этого поста в Oracle. Я хотел бы добиться того же в SQL Server, хотя и ограничен версией 2008 года.
Хранимая процедура Oracle: вернуть как результирующий набор, так и выходные параметры< /а>
Что мне нравится делать с использованием одного и того же SP, так это то, что и результирующий набор, и выходной параметр представляют информацию, которую я прочитал из XML-документа. Итак, название SP как-то само за себя говорит.
ИЗМЕНИТЬ
Как некоторые думают, это может быть дубликат:
Возможно вернуть параметр вывода с помощью DataReader
Я не думаю, что ответы связаны с тем, как ведет себя DataReader, а не с тем, как этого можно достичь с помощью TSQL.
Дело в том, что я получаю значение из выходного параметра, а не из результирующего набора, он всегда возвращает ноль.
Итак, я работаю только над проектом SQL Server, и мне это нужно. В противном случае я разделю его на две части, если не смогу добиться этого своевременно.
Вот как это используется:
declare @xmlInformationData table(MyOrderId varchar(12) not null
,CreatedAt datetime not null)
insert into @xmlInformationData
execute uspReadMyXmlInformation @myXmlDoc, @myProductNum output
while 0<(select count(*) from @xmlInformationData)
begin
-- This will never be executed because I have no rows in @xmlInformationData
-- And yet, before the loop, I have my out param value!
end
DataReader
в приложении .NET. - person HABO   schedule 08.02.2019out
обычно доступны только после обработки последнего набора результатов. - person Lucero   schedule 08.02.2019DataReader
, а скорее из-за характера протокола TDS, используемого для связи с SQL Server. Я не могу воспроизвести вашу проблему при выполнении запроса на сервере, см. скриншот. - person Lucero   schedule 10.02.2019