2012-03-24 3 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. Любые идеи?

Заранее спасибо Деб

ответ

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 <cell>....</cell>

+0

Thanks Marc. Сохраненный мой день – Deb

+0

+1 проще простого, чем tsql XML voodoo, как здесь: http://stackoverflow.com/questions/24944539/using-attribute-more-than-once-in-for-xml-path-t-sql- запрос-с-же-элемента Нама – Mzn

Смежные вопросы