Я не думаю, что возможно иметь дело с одноуровневыми узлами с использованием FOR XML PATH
.
Мне удалось сгенерировать вашу схему, используя FOR XML EXPLICIT
.
Вывод не является допустимым XML, так как не содержит определения для тогда xsi
пространства имен, но он соответствует вашей спецификации:
create table #test
(id int identity
,name varchar(50)
,age int
,height varchar(20))
insert #test (name,age,height)
select 'Alice',32,'6 feet one inch'
union select 'Bob',30,'5 feet 10 inches'
union select 'Charles',23,'6 feet two inch'
SELECT 1 AS Tag
,NULL AS Parent
,'' AS [root!1]
,null AS [person!2!name!ELEMENT]
,null AS [description!3]
,null AS [description!3!xsi:type]
,null AS [description!4]
,null AS [description!4!xsi:type]
UNION ALL
SELECT 2 AS Tag
,1 AS Parent
,null
,name
,null
,null
,null
,null
FROM #test
UNION ALL
SELECT 3 AS Tag
,2 AS Parent
,null
,name
,age
,'me:age'
,null
,null
FROM #test
UNION ALL
SELECT 4 AS Tag
,2 AS Parent
,null
,name
,null
,null
,height
,'me:height'
FROM #test
order by [person!2!name!ELEMENT],Tag
FOR XML EXPLICIT