将 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 元素的值。
我在 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 元素的值。