2012-02-01 4 views
1

Iは、(明確にするために短縮)通常の方法で、いくつかのXMLを返す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 

しかし、私は、XMLデータ型にsp_subnodeの実行結果を割り当て、失敗した巣にしようとするようにしようとしている方法。

これは、人々が頻繁にやりたがっているようなものですが、どうやってそれを行うのかに関する参考文献は見つかりませんでした。それも可能ですか?

答えて

2

これは、XMLを返すユーザー定義関数で行うことができます。

XMLを返す関数:確かにこの問題を回避するのですが、私はそれが理想的だかわからない

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

:このような

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

使用。基本的には、別々のSPごとに、後で出力を入れたい場合に備えて、重い持ち上げを行うufとパートナーにしなければならないということです。面倒です。しかし、それ以上の提案がないなら、私はそれを考慮する。 –

関連する問題