将 xml 转换为键值对 SQL Server

Bij*_*mas 2 xml sql-server-2012

我有一个带有 SQL Server 2012 结构的 xml 列

<root>
  <person>
    <firstName>Jon</firstName>
    <lastName>Johnson</lastName>
  </person>
Run Code Online (Sandbox Code Playgroud)

我怎样才能检索数据

Key        | Value  
-------------------------------------------------------------------
First Name | Jon
Last Name  | Johnson
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

尝试这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

通过在 XPathCROSS APPLY上使用/nodes/person/*,您基本上会获得一个 XML 片段的伪表 - 一个对应于 的每个子元素<person>。用于local-name(.)获取XML 元素的名称.,并获取该 XML 元素的值。