我试图将输出参数从存储过程传递到另一个存储过程。父级需要将参数传递给子级。
我可以在这样的select语句中即时返回输出吗?
如果没有,解决这个问题的好方法是什么?
存储过程(子)
@uid int,
@result nvarchar(max) output
as
begin select @result = stuff((
select
'cid' = cid
from db
for xml path('')
),
1,
1,
'<'
)
return
end
存储过程(父)
select
'id' = uid,
'result' = (exec db.dbo.table uid, @result output)
from table
这里我尝试从parent select语句传入uid
,并将其传递给另一个存储过程,并将结果返回到select。
答案 0 :(得分:0)
这可能就是您所追求的,但是,您EXEC
中有SELECT
声明的事实让我想到了。
CREATE PROC Child @uid int, @result nvarchar(MAX) OUTPUT AS
SELECT @result = STUFF((SELECT cid AS cid
FROM db
--Should there be a WHERE here?
FOR XML PATH(N'')),1,1,N'<');
GO
CREATE PROC Parent @uid int AS
DECLARE @result nvarchar(MAX);
EXEC Child @uid, @result OUTPUT;
SELECT @uid UID, @result AS Result;
GO
这更像是你在问题中所拥有的文字副本。这可能是你使用内联表函数的更多内容:
CREATE FUNCTION Child (@uid int)
RETURNS TABLE
AS RETURN
SELECT STUFF((SELECT cid AS cid
FROM db
--Should there be a WHERE here?
FOR XML PATH(N'')),1,1,N'<') AS cid;
GO
CREATE PROC Parent @uid int AS
SELECT @uid UID,
C.cid
FROM [Table]
CROSS APPLY dbo.Child(@uid) C
GO
就像我在评论中所说,似乎我们在这里错过了一个什么地方。