我有一个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数据类型并尝试嵌套失败。
这似乎是人们想要经常做的事情,但我没有找到任何关于如何做的参考。它甚至可能吗?
答案 0 :(得分: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')