2012-02-01 64 views
1

我有一個FOR XML PATH存儲過程返回以通常的方式一些XML(縮短爲清楚起見):如何嵌套使用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數據類型,並嘗試已經失敗窩的結果。

這似乎是人們想要經常做的事,但我還沒有找到任何有關如何去做的參考。它甚至有可能嗎?

回答

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') 
+0

這當然是一個方法,但我不知道它是理想的。這基本上意味着,對於每個單獨的SP,您都希望您必須將其與uf進行合作,以便在您稍後要嵌套輸出時進行繁重的工作。似乎凌亂。但是如果沒有更好的建議,我會考慮它。 – 2012-02-01 14:11:11