Xml 结构在 Sql 服务器中使用 For Xml

Xml structure using For Xml in Sql Server

我正在尝试使用这种方法为我的 table 创建一个 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') 

如果我在查询中遗漏任何内容或我使用的方法不正确,请告诉我。

提前致谢。

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')