Динамически получить XML значения типа данных в разных столбцах на SQL сервере - PullRequest
0 голосов
/ 20 января 2020

У меня есть таблица с одним столбцом с типом данных xml и содержит значения в формате xml.

например,

<row><A>1</A><B>xyz</B></row>
<row><A>2</A><B>jkl</B></row>

И хочу вывод в таблицу:

-------------
|  A  |  B  |
-------------
|  1  | xyz |
|  2  | jkl |
-------------

Я хочу, чтобы это показывалось динамически. Есть ли функция, которая возвращает xml данные в таблицу?

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Кажется, нет ничего динамического c в том, что вы хотите, и вам просто нужно использовать XQUERY:

SELECT V.YourXML.value('(/row/A/text())[1]','int') AS A,
       V.YourXML.value('(/row/B/text())[1]','varchar(3)') AS B
FROM (VALUES(CONVERT(xml,'<row><A>1</A><B>xyz</B></row>')),
            (CONVERT(xml,'<row><A>2</A><B>jkl</B></row>')))V(YourXML);
0 голосов
/ 20 января 2020

Вы можете проверить и попробовать этот запрос.

declare @X xml = '<row><A>1</A><B>xyz</B></row><row><A>2</A><B>jkl</B></row>';

select  x.r.value('(A)[1]', 'varchar(100)') as [A],
    x.r.value('(B)[1]', 'varchar(500)') as [B]
from    @X.nodes('/row') as x(r);

Вот вывод:

A   B
-------
1   xyz
2   jkl

Здесь вы можете найти демо . Для динамического доступа к имени узла и его значениям вы можете попробовать следующий запрос:

DECLARE @input XML =  '<row><A>1</A><B>xyz</B></row><row><A>2</A><B>jkl</B></row>'

SELECT
    NodeName = C.value('local-name(.)', 'varchar(50)'),
    NodeValue = C.value('(.)[1]', 'varchar(50)') 
FROM @input.nodes('/row/*') AS T(C)

Он выдаст вывод, как показано ниже. Чтобы узнать больше, вы можете обратиться к этому SO-ответу .

NodeName    NodeValue
--------------------
A           1
B           xyz
A           2
B           jkl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...