我有一个包含两列的表(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 = ...
语句的查询以获得我想要的结果?
感谢您阅读我的问题。
丹
答案 0 :(得分:2)
没有列别名的子选择不会将其结果包装在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;
返回:
<ROOT>
<ELEM FOO="22" BAR="B" />
<ELEM FOO="33" BAR="C" />
</ROOT>