Добавление JSON Valuetypes в узлы XML с использованием SQL - PullRequest
0 голосов
/ 28 июня 2018

У меня есть приведенный ниже вывод XML, сгенерированный с использованием SQL-запроса (добавлен в ссылку rextester):

<Main xmlns:json="http://www.samplenamespace.com/json">
 <ID>1001</ID>
 <details>
    <name>John</name>
    <age>12</age>
 </details>
</Main>

Я хочу знать, как добавить пространство имен xmlns:json="http://www.samplenamespace.com/json" к узлу 'Main'.

желаемый результат:

<Main xmlns:json="http://www.samplenamespace.com/json">
 <ID json:ValueType="Number">1001</ID>
 <details>
    <name>John</name>
    <age>12</age>
 </details>
</Main>

ссылка для ректестера: http://rextester.com/FAV86925

любая помощь?!

1 Ответ

0 голосов
/ 29 июня 2018

Я не знаю, правильно ли я понял, но этот запрос создаст ваш 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
...