Вы можете проверить и попробовать этот запрос.
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