Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Работа с XML-данными  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Друзья, требуется помощь!
Пытаюсь написать хранимую процедуру, которая получает XML-данные и записывает объекты и связи между ними в таблицы.
Как распарсить XML-данные, имеющие чётко определённую структуру, я немного разобрался.
declare @xmldata xml = 
'<response list="true">
 <user>
  <first_name>Василий</first_name>
  <last_name>Иванов</last_name>
  <city>Москва</city>
  <country>Россия</country>
  <schools list="true">
       <school>
        <country>Россия</country>
        <city>Иваново</city>
        <name>Средняя школа №27</name>
        <year_from>1990</year_from>
        <year_to>1992</year_to>
       </school>
       <school>
        <country>Россия</country>
        <city>Москва</city>
        <name>Средняя школа 2271</name>
        <year_from>1996</year_from>
        <year_to>2001</year_to>
        <year_graduated>2001</year_graduated>
       </school>
  </schools>
 </user>
 <user>
  <first_name>Анна</first_name>
  <last_name>Полещук</last_name>
  <city>Самара</city>
  <country>Россия</country>
 </user>
 </response>'
 
 select
	 [first_name] = tab.col.value('first_name[1]', 'nvarchar(500)')
	,[last_name] = tab.col.value('last_name[1]', 'nvarchar(500)')
	,[city] = tab.col.value('city[1]', 'nvarchar(500)')
	,[country] = tab.col.value('country[1]', 'nvarchar(500)')
from @XMLdata.nodes('response/user') tab(col)

А вот как обрабатывать вложенные объекты (schools), когда заранее неизвестно, сколько их будет?
15 мар 17, 18:42    [20299242]     Ответить | Цитировать Сообщить модератору
 Re: Работа с XML-данными  [new]
Кесарь
Member

Откуда:
Сообщений: 453
=Сергей=, используй узлы. Это конструкция вида:

select
 T.c.value('@country', 'varchar(255)'),
 T.c.value('@city', 'varchar(255)')
from @XML.nodes('/user/schools/school') as T(c)
15 мар 17, 18:50    [20299272]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить