将xml转换为键值对SQL Server

时间:2015-01-06 09:51:42

标签: xml sql-server-2012

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

<root>
  <person>
    <firstName>Jon</firstName>
    <lastName>Johnson</lastName>
  </person>

如何检索

等数据
Key        | Value  
-------------------------------------------------------------------
First Name | Jon
Last Name  | Johnson

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

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

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