将多行 XML 数据合并为一个 XML 值(SQL 服务器)

Combine Multiple Rows of XML Data into One XML Value (SQL Server)

我有一个包含两列的 table(DataXML 是 xml 数据类型):

 RowID DataXML
 ––––– –––––––––––––––––––––––––––
 1     <ELEM FOO="11" BAR="A" />
 2     <ELEM FOO="22" BAR="B" />
 3     <ELEM FOO="33" BAR="C" />
 4     <ELEM FOO="44" BAR="D" />

我想写一个像这样的 T-SQL 语句:

declare @MyXML xml;
set @MyXML = (
   SELECT  DataXML
   FROM    MyTable
   WHERE   RowID BETWEEN 2 AND 3
   FOR     XML ??????
);

并在@MyXML 中得到此文档:

<ROOT>
  <ELEM FOO="22" BAR="B" />
  <ELEM FOO="33" BAR="C" />
</ROOT>

如何为我的 set @MyXML = ... 语句编写查询以获得我想要的结果?

感谢您阅读我的问题。

没有列别名的子选择不会将其结果包装在 XML 元素中:

declare @data table (
    [RowID] int not null
  , [DataXML] xml not null
);

insert into @data ([RowID], [DataXML])
values (1, N'<ELEM FOO="11" BAR="A" />')
     , (2, N'<ELEM FOO="22" BAR="B" />')
     , (3, N'<ELEM FOO="33" BAR="C" />')
     , (4, N'<ELEM FOO="44" BAR="D" />');

select (
           select (select a.[DataXML])
           from @data as a
           where a.RowID between 2 and 3
           for xml path(''), type
       )
for xml path('ROOT'), type;

Returns:

<ROOT>
    <ELEM FOO="22" BAR="B" />
    <ELEM FOO="33" BAR="C" />
</ROOT>