1

通常の方法でいくつかのXMLを返すFORXMLPATHストアドプロシージャがあります(わかりやすくするために短縮されています)。

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 に答える