对于XML,将所有列名称作为相同元素返回

时间:2012-03-24 14:02:04

标签: sql-server xml tsql sql-server-2005 for-xml

我需要按照以下方式返回xml

<row id="1">
<cell>1</cell>
<cell>setup/pagemst</cell>
<cell>Page Master</cell>
</row>
<row id="2">
<cell>2</cell>
<cell>setup/modules</cell>
<cell>Module Master</cell>
</row>

我使用了以下查询,但它不起作用

select 
pageid id,pgurl cell,pgname cell
from m_pages
for xml raw

所有列的相同列名在oracle中工作正常但在SQL Server 2005中没有。任何想法?

提前致谢 DEB

1 个答案:

答案 0 :(得分:3)

使用SQL Server 2005及更高版本中提供的FOR XML PATH语法 - 尝试以下方法:

DECLARE @table TABLE (PageID INT, PageUrl VARCHAR(50), PageName VARCHAR(50))

INSERT INTO @table VALUES(1, 'setup/pagemst', 'Page Master'),(2, 'setup/modules', 'Module Master')

select 
    PageID AS '@id',
    PageID AS 'cell',
    '',
    PageUrl AS 'cell',
    '',
    PageName AS 'cell'
from @table
FOR XML PATH('row')

最后给我输出结果:

<row id="1">
  <cell>1</cell>
  <cell>setup/pagemst</cell>
  <cell>Page Master</cell>
</row>
<row id="2">
  <cell>2</cell>
  <cell>setup/modules</cell>
  <cell>Module Master</cell>
</row>

FOR XML PATH语法允许您定义要作为XML属性(... AS '@id')或XML元素返回的值。通过在元素之间添加“空”行,可以防止输出被合并/连接 到单个<cell>....</cell> XML元素