Страницы

Поиск по вопросам

пятница, 15 февраля 2019 г.

Запрос к XML в mssql

Имеется кострукция вида:
... ... ... ... ...
Кол-во элементов setting не известно. То есть в каждой записи может присутствовать от 0 до n данных элементов.
Я понимаю, как вывести единичные элменты. Например, id
SELECT column.value('(first/id) [1]', 'integer') AS 'id' FROM table
Но вот с множественными элементами возникает вопрос. Требуется чтобы при запросе я получил список вида:
id | setting id | setting ....


Ответ

DECLARE @Test XML
SET @Test = CAST( ' 100 MyObject p1 p2 2 3 ' AS XML)
SELECT t.f.value('(first/id)[1]', 'integer') AS Id, n.s.value('.[1]', 'varchar(100)') AS params, n.s.value('(./param1)[1]', 'varchar(100)') AS param1, n.s.value('(./param2)[1]', 'varchar(100)') AS param2 FROM (SELECT @Test AS f) t CROSS APPLY f.nodes('first/settings/setting/.[1]') n(s)
UPD: Для приведенного примера выбор из таблицы:
SELECT t.column.value('(first/id)[1]', 'integer') AS Id, nodes.setting.value('.[1]', 'varchar(100)') FROM table t CROSS APPLY t.column.nodes('first/settings/setting/.[1]') nodes(setting)

Комментариев нет:

Отправить комментарий