快速选择存储过程输出(SQL Server)

时间:2018-05-04 13:54:52

标签: sql sql-server stored-procedures return

我试图将输出参数从存储过程传递到另一个存储过程。父级需要将参数传递给子级。

我可以在这样的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。

1 个答案:

答案 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

就像我在评论中所说,似乎我们在这里错过了一个什么地方。