MS SQL. Парсинг XML и запись в таблицы
Подскажите, пожалуйста, как правильно распарсить.
Предположим есть таблицы inf_stock и inf_block, их нужно заполнить данными из xml из блоков inf_stock и inf_block.
У меня есть запрос которым можно получить данные из блоков, но как их разложить в разные таблицы в одном запросе я не понимаю.
Вообще, можно отдельным запросом распарсить блок inf_stock и отдельно inf_block, но я предполагаю есть способ сделать это одним запросом
DECLARE @bxml xml
SET @bxml = '
<root>
<body>
<main_info>
<val_beta> Что-то важное </val_beta>
</main_info>
<inf_stock>
<val> 01 </val>
<val1> текст </val1>
<val2> другой текст </val2>
</inf_stock>
<inf_block>
<val> 02 </val>
<val1> дата </val1>
<val2> другая дата </val2>
</inf_block>
</body>
</root>
'
SELECT
VAL_stock = t.c.query ('./val').value('.', 'nvarchar(150)'),
VAL1_stock = t.c.query ('./val1').value('.', 'nvarchar(150)'),
VAL2_stock = t.c.query ('./val2').value('.', 'nvarchar(150)'),
VAL_block = b.c.query ('./val').value('.', 'nvarchar(150)'),
VAL1_block = b.c.query ('./val1').value('.', 'nvarchar(150)'),
VAL2_block = b.c.query ('./val2').value('.', 'nvarchar(150)')
FROM (SELECT @bxml AS bxml) xx
CROSS APPLY xx.bxml.nodes('/root/body/inf_stock') t (c)
CROSS APPLY xx.bxml.nodes('/root/body/inf_block') b (c)