SQL Server 2012从表创建特定的XML

时间:2013-02-11 16:48:00

标签: sql-server xml sql-server-2012

我有一个表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)

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

2 个答案:

答案 0 :(得分:3)

如果您想要特定的输出格式并使用PATH,我想您想避免使用AUTO。没有测试但是如何:

SELECT * 
FROM Table 
FOR XML PATH('ID'), ROOT('Table')

答案 1 :(得分:1)

@Dave Sexton给了我正确的答案:

上述解决方案如下:

select ID 
  from Table 
   for XML Path(''), Root('Table')