【问题标题】:How can I nest stored procedures that return XML using FOR XML PATH?如何嵌套使用 FOR XML PATH 返回 XML 的存储过程?
【发布时间】:2012-02-01 10:36:29
【问题描述】:

我有一个 FOR XML PATH 存储过程,它以通常的方式返回一些 XML(为清楚起见而缩短):

CREATE PROCEDURE sp_returnsubnode
AS
BEGIN
SELECT  subnode.subnodeid "@subnodeid"
       ,subnode.somedata "somedata"
FROM subnode
FOR XML PATH('subnode')
END

我有另一个存储过程,我想将上述查询的结果包含在例如

CREATE PROCEDURE sp_returnmainxml
AS
BEGIN
SELECT  node.nodeid "@nodeid"
       ,node.nodedata "data"
       ,[AT THIS POINT I WOULD LIKE TO CALL sp_returnsubnode AND NEST IT]
       ,node.moredata "moredata"
FROM node
FOR XML PATH ('node')
END

但我尝试过的方法例如将执行 sp_subnode 的结果分配给 xml 数据类型并尝试嵌套失败。

这似乎是人们经常想做的事情,但我没有找到任何关于如何做的参考。有没有可能?

【问题讨论】:

    标签: xml sql-server-2008 for-xml-path


    【解决方案1】:

    您可以使用返回 XML 的用户定义函数来执行此操作。

    返回 XML 的函数:

    create function getsubnode(@P int)
    returns xml as
    begin
      return (
              select @P as '@subnodeid',
                     'SubNodData' as somedata
              for xml path('subnode'), type
             ) 
    end
    

    这样使用:

    select nodeid as '@nodeid',
           nodedata as data,
           dbo.getsubnode(nodeid),
           moredata
    from node
    for xml path('node')
    

    【讨论】:

    • 这当然是一种解决方法,但我不确定它是否理想。这基本上意味着对于您想要的每个单独的 SP,您必须将它与一个 uf 合作,以防您以后想要嵌套输出。看起来很乱不过如果没有更好的建议我会考虑的。
    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多