使用 Sql Server 读取 Xml 的内部节点值

Abh*_*hay 3 xml sql-server

我想在sql中读取xml的节点值,我的xml看起来像这样

在此处输入图片说明

我只想读取“订单 1”的订单节点的值,我的代码是

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * FROM OPENXML (@idoc, '/ROOT/Customer/Order',0)
WITH (
    [Order]  varchar(100)
    );
Run Code Online (Sandbox Code Playgroud)

McN*_*ets 7

CREATE TABLE test(data xml);
insert into test values
('
<ROOT>
  <Customer>
    <Order>Order 1</Order>
  </Customer>
  <Customer>
    <Order>Order 2</Order>
  </Customer>
</ROOT>');
GO
Run Code Online (Sandbox Code Playgroud)
1 行受影响

如果您需要<Order>XML 数据的第一个元素,您可以使用下一句。

SELECT data.value('(ROOT/Customer/Order)[1]', 'varchar(100)')
FROM   test;
GO
Run Code Online (Sandbox Code Playgroud)
| (无列名) |
| :--------------- |
| 订单 1 |

如果您需要选择所有<Order>元素,您可以使用 .nodes() 的 CROSS APPLY 解决方案

SELECT T2.lin.value('(Order)[1]', 'varchar(100)')
FROM   test
CROSS APPLY data.nodes('/ROOT/Customer') as T2(lin)
GO
Run Code Online (Sandbox Code Playgroud)
| (无列名) |
| :--------------- |
| 订单 1 |
| 订单 2 |

dbfiddle在这里