You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中使用XPath提取XML节点时保留节点关联关系?

SQL提取XML中关联的Title与Author数据

要保留Title和Author的关联关系,核心是先定位到每个节点,再在该节点的上下文里提取对应的子节点值,而不是单独提取Title或Author,也不要用全局搜索的//路径。

正确查询语句

SELECT 
    bookNode.value('(Title/text())[1]', 'VARCHAR(100)') AS Title,
    bookNode.value('(Author/text())[1]', 'VARCHAR(100)') AS Author
FROM [dbo].[Books]
CROSS APPLY [XML].nodes('//Books/Book') AS BooksNodes(bookNode)

为什么之前的方法不行?

  • 两次CROSS APPLY分别提取Title和Author:相当于把所有Title和所有Author做笛卡尔积,自然会打乱关联关系,因为没有绑定到同一个父节点。
  • 定位到后用//Title提取://是全局搜索,会返回整个XML文档中第一个Title的值,而不是当前节点下的子节点,所以会重复数据。

额外说明

  • 如果你的XML中<Books>是根节点,路径可以写成'/Books/Book',比//Books/Book更精准,避免匹配文档中其他位置的同名节点。
  • 使用(Title/text())[1]而不是直接Title/text(),是为了确保只取第一个文本节点,避免因XML中存在多个文本片段(比如节点内有换行或注释)导致返回拼接后的异常值。

内容的提问来源于stack exchange,提问作者SQLNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:00:17