Структура 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')