我想在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)
Run Code Online (Sandbox Code Playgroud)CREATE TABLE test(data xml); insert into test values (' <ROOT> <Customer> <Order>Order 1</Order> </Customer> <Customer> <Order>Order 2</Order> </Customer> </ROOT>'); GO
1 行受影响
如果您需要<Order>
XML 数据的第一个元素,您可以使用下一句。
Run Code Online (Sandbox Code Playgroud)SELECT data.value('(ROOT/Customer/Order)[1]', 'varchar(100)') FROM test; GO
| (无列名) | | :--------------- | | 订单 1 |
如果您需要选择所有<Order>
元素,您可以使用 .nodes() 的 CROSS APPLY 解决方案
Run Code Online (Sandbox Code Playgroud)SELECT T2.lin.value('(Order)[1]', 'varchar(100)') FROM test CROSS APPLY data.nodes('/ROOT/Customer') as T2(lin) GO
| (无列名) | | :--------------- | | 订单 1 | | 订单 2 |
dbfiddle在这里