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) 

Ответы (0 шт):