Разбор узлов XML Ключ: значение - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь разобрать этот пример:

declare @xml xml

set @xml = '<SelectedValues>
  <SelectedValue>
    <Name>Brand</Name>
    <Value>Baume &amp; Mercier</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>MPN</Name>
    <Value>902</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>Model</Name>
    <Value>Baume &amp; Mercier 902</Value>
  </SelectedValue>
</SelectedValues>'

 select c.value('local-name(.)', 'varchar(max)') as 'myKey'
        , c.value('.', 'varchar(max)') as 'myValue' 
from @xml.nodes('/SelectedValues//*[not(*)]') as T(c) 

Мой желаемый вывод должен быть:

myKey myValue
Brand Baume & Mercier
MPN   902
Model Baume & Mercier 902

Но вместо этого я получаю этот:

xml

Что я здесь не так делаю?

1 Ответ

1 голос
/ 10 октября 2019

Это называется уничтожением, преобразованием XML в реляционный формат.

SQL

-- DDL and sample data population, start
DECLARE @xml XML = N'<SelectedValues>
  <SelectedValue>
    <Name>Brand</Name>
    <Value>Baume &amp; Mercier</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>MPN</Name>
    <Value>902</Value>
  </SelectedValue>
  <SelectedValue>
    <Name>Model</Name>
    <Value>Baume &amp; Mercier 902</Value>
  </SelectedValue>
</SelectedValues>';
-- DDL and sample data population, end

SELECT c.value('(Name/text())[1]', 'VARCHAR(MAX)') AS [myKey]
    , c.value('(Value/text())[1]', 'VARCHAR(MAX)') AS [myValue]
FROM @xml.nodes('/SelectedValues/SelectedValue') AS t(c);

Вывод

+-------+---------------------+
| myKey |       myValue       |
+-------+---------------------+
| Brand | Baume & Mercier     |
| MPN   | 902                 |
| Model | Baume & Mercier 902 |
+-------+---------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...