Я хотел бы знать, возможно ли, чтобы хранимая процедура 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 говорит само за себя, так или иначе.
РЕДАКТИРОВАТЬ
Как некоторые думают, это может быть дубликатом:
Можно вернуть параметр out с помощью DataReader
Я не думаю, что это связано с тем, что ответы связаны с тем, как DataReader ведет себя более эффективно, чем с помощью TSQL.
Дело в том, что я получаю значение из выходного параметра, но я не получаю его из набора результатов вообще, оно всегда возвращает ноль.
Итак, я использую SQLСервер только проект, и мне это нужно.В противном случае я разделю его на две части, если не смогу своевременно добиться этого.
Вот как это используется:
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