将 xml 转换为键值对 SQL 服务器

Convert xml to Key Value pair SQL Server

我在 SQL Server 2012

中有一个具有结构的 xml 列
<root>
  <person>
    <firstName>Jon</firstName>
    <lastName>Johnson</lastName>
  </person>

如何检索像

这样的数据
Key        | Value  
-------------------------------------------------------------------
First Name | Jon
Last Name  | Johnson

尝试这样的事情:

DECLARE @input TABLE (ID INT NOT NULL, XmlData XML)

INSERT INTO @input VALUES(1, '<root>
  <person>
    <firstName>Jon</firstName>
    <lastName>Johnson</lastName>
  </person></root>')

select
    XC.value('local-name(.)', 'varchar(50)'),
    XC.value('(.)[1]', 'varchar(50)')
FROM
    @input
CROSS APPLY
    XmlData.nodes('/root/person/*') AS XT(XC)
WHERE
    ID = 1

通过在 /nodes/person/* XPath 上使用 CROSS APPLY,您基本上得到了 XML 片段的伪 table - [=13 的每个子元素一个=].使用 local-name(.) 获取 XML 元素的 name,使用 . 获取 XML 元素的值。