XML возвращает все имена столбцов как один и тот же элемент - PullRequest
3 голосов
/ 24 марта 2012

У меня есть требование вернуть 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. Есть идеи?

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

1 Ответ

3 голосов
/ 24 марта 2012

Используйте синтаксис 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

...