1

我有一个 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 数据类型并尝试嵌套失败。

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

4

1 回答 1

2

您可以使用返回 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')
于 2012-02-01T13:31:15.170 回答