Структура XML с использованием For Xml в Sql Server

Я пытаюсь создать вывод XML для моей таблицы, используя этот подход, но он, кажется, дублирует несколько узлов для TopLevelItem. В действительности я надеялся, что формат будет выглядеть так:

<TopLevelItems>

  <TopLevelItem field1="1">
    <LowLevelItem fieldA="a" />
    <LowLevelItem fieldA="b" />
    <LowLevelItem fieldA="def" />
  </TopLevelItem>

  <TopLevelItem field1="2">
    <LowLevelItem fieldA="c" />
    <LowLevelItem fieldA="d" />
  </TopLevelItem>

</TopLevelItems>


DECLARE @sites TABLE (username varchar(50), ID INT, Name VARCHAR(50) )
INSERT  INTO @sites
VALUES  ('a', 1, 'a' ),
        ('a', 1, 'b' ),
        ('a', 2, 'c' ),
        ('a', 2, 'd' ),
        ('b', 1, 'def' )


       select 
  T.ID as '@field1',

  ((select 
      L.Name as '@fieldA'

    from @sites as L
    where T.ID = L.ID
    for xml path('LowLevelItem'), type))
from @sites as T
for xml path('TopLevelItem'), root('TopLevelItems') 

Дайте мне знать, если я что-то упустил в своем запросе или подход, который я использую, не подходит.

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

1 ответ

Решение
SELECT  T.ID AS '@field1'
      , ( (SELECT   L.Name AS '@fieldA'
           FROM     @sites AS L
           WHERE    T.ID = L.ID
        FOR
          XML PATH('LowLevelItem')
            , TYPE)
        )
FROM    (SELECT DISTINCT ID FROM @sites) AS T
FOR     XML PATH('TopLevelItem')
          , ROOT('TopLevelItems') 
Другие вопросы по тегам