Для 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. Есть идеи?

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


person Deb    schedule 24.03.2012    source источник


Ответы (1)


Используйте синтаксис 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. Добавляя «пустые» строки между элементами, вы предотвращаете объединение/объединение вывода в один элемент <cell>....</cell> XML.

person marc_s    schedule 24.03.2012
comment
+1 проще, чем tsql XML voodoo, как здесь: stackoverflow.com/questions/24944539/ - person Mzn; 13.09.2015