2012-03-24 62 views
3

我有一个要求返回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

回答

3

使用可用的FOR XML PATH语法在SQL Server 2005和较新的 - 尝试这样的事:

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元素。通过在元素之间添加“空行”,可以防止将输出合并/连接成单个 XML元素

+0

谢谢Marc。保存我的日子 – Deb 2012-03-24 14:30:45

+0

+1比tsql XML voodoo简单得多,因为在这里:http://stackoverflow.com/questions/24944539/using-attribute-more-than-once-in-for-xml-path-t-sql-查询与 - 相同的元素 - 南 – Mzn 2015-09-13 07:20:50