1

我有一张Table有一列的表ID。它包含简单的字母,假设 Table = 'A', 'B', 'C'。

我需要创建一个看起来像这样的 xml 文件

<Table>
  <ID>A</ID>
  <ID>B</ID>
  <ID>C</ID>
</Table>

所以我尝试了

select * from Table for XML AUTO, ELEMENTS

但这会产生

<Table>
  <ID>A</ID>
</Table>
<Table>
  <ID>B</ID>
</Table>
<Table>
  <ID>B</ID>
</Table>

据我了解,内部节点集合代表表的一条记录(在这种情况下,由单个字段/节点组成),周围的标签表示记录本身。但这不是我希望看到的。

我的(相当脏的)解决方案将 xml 转换为字符串,删除

</Table><Table>

配对然后重建 XML

declare @x nvarchar(max)
set @x = (select id from Table for xml auto, elements)
set @x = replace(@x, '</Table><Table>', '')
select cast(@x as xml)

我的问题很简单:是否有正确的方法来实现我的目标,还是我必须接受这个丑陋的“解决方案”?

4

2 回答 2

3

如果您想要特定的输出格式并改用 PATH,我认为您想避免使用 AUTO 。未经测试,但如何:

SELECT * 
FROM Table 
FOR XML PATH('ID'), ROOT('Table')
于 2013-02-11T16:58:05.083 回答
1

@Dave Sexton 给了我正确的一脚:

上述解决方法如下:

select ID 
  from Table 
   for XML Path(''), Root('Table')
于 2013-02-11T18:26:41.183 回答