Я не знаю, правильно ли я понял, но этот запрос создаст ваш XML за один раз. Если для <details>
нет отношения 1:n
, вам не нужен дополнительный выбор.
Кстати: вы не должны хранить возраст как int, а хранить DOB и вычислять возраст по требованию.
create table #Cdetails(cid int, name varchar(5), age int)
insert into #Cdetails
values(1001,'John',12),
(1002,'Rick',19),
(1003,'Diane',25),
(1004,'Kippy',26)
;WITH XMLNAMESPACES ('http://www.samplenamespace.com/json' as json)
select 'Number' AS [ID/@json:ValueType]
,cd1.cid AS ID
,cd1.[name] AS [details/name]
,cd1.age AS [details/age]
from #Cdetails cd1
For XML Path('Main');
Результат
<Main xmlns:json="http://www.samplenamespace.com/json">
<ID json:ValueType="Number">1001</ID>
<details>
<name>John</name>
<age>12</age>
</details>
</Main>
<Main xmlns:json="http://www.samplenamespace.com/json">
<ID json:ValueType="Number">1002</ID>
<details>
<name>Rick</name>
<age>19</age>
</details>
</Main>
... more of them