gpt4 book ai didi

sql-server - 使用nodes()方法分解XML

转载 作者:行者123 更新时间:2023-12-03 08:20:26 25 4
gpt4 key购买 nike

由于xml中节点的级别不同,我无法在sql server中粉碎此xml。如何在单个查询中实现此目的。

我有以下格式的XML IN:

<abc>
<item>
<Customer id="12345" age="26">
<NAME>Alex</NAME>
</customer>
</item>
</abc>


我尝试了以下查询,该查询为我提供了客户ID,但除此之外,我还希望使用名称列。

SELECT doc.col.value('@id','INT')
FROM @xml.nodes('/abc/item/customer') doc(col)


电流输出:

CustomerID
----------
12345


所需的输出:

CustomerID   Name
---------- -------
12345 Alex

最佳答案

像这样尝试

DECLARE @xml XML=
N'<abc>
<item>
<customer id="12345" age="26">
<NAME>Alex</NAME>
</customer>
</item>
</abc>';

SELECT doc.col.value('@id','INT') AS ID
,doc.col.value('(NAME/text())[1]','nvarchar(max)') AS Name
FROM @xml.nodes('/abc/item/customer') doc(col);


一些解释:


XML严格区分大小写。您混合了 Customercustomer ...
使用正确的缩进来查看XML很有帮助:


您可以看到 <NAME>低于 <customer>

<abc>
<item>
<customer id="12345" age="26">
<NAME>Alex</NAME>
</customer>
</item>
</abc>


当您的 .nodes()降至 <customer>时,这是您的当前节点。属性 @id直接坐在那里。 text()中的 <NAME>将从此处继续。

关于sql-server - 使用nodes()方法分解XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50044789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com