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

SQL查询XML中KeyValuePair/Value下HHQuoteData节点无返回问题

问题背景

我的XML结构如下图所示:
XML结构示意图
需求:从XML的KeyValuePair/Value集合中选取HHQuoteData节点。
当前运行如下代码未返回任何数据:

SELECT
    k.kv.query('KeyValuePair/Value/HHQuoteData')
FROM DeclinedQuote.RequestLogXMLsToProcess aph
CROSS APPLY [PayloadXML].nodes('/server/requests/Session.setDocumentRq/session/data/policy/AdditionalData') A (ad)
CROSS APPLY a.ad.nodes('KeyValuePair') k (kv)
WHERE k.kv.exist('(/Value[contains(.,"HHQuoteData")])') = 1 
错误原因

代码存在三处逻辑错误:

  • 路径上下文错误:第二次CROSS APPLY已经将上下文节点定位到KeyValuePair层级,SELECT子句中仍写KeyValuePair/Value/HHQuoteData,相当于在当前KeyValuePair节点下查找同名子节点,路径不匹配。
  • 匹配逻辑错误:exist()中使用contains(.,"HHQuoteData")是匹配节点的文本内容包含HHQuoteData字符串,而需求是匹配Value节点下名为HHQuoteData的子节点,判断条件完全写错。
  • 路径写法错误:exist()中的路径以/开头代表从XML根节点查找绝对路径,当前上下文已经在KeyValuePair节点下,写绝对路径无法匹配到当前节点下的子元素。
修正后代码
SELECT
    k.kv.query('Value/HHQuoteData')
FROM DeclinedQuote.RequestLogXMLsToProcess aph
CROSS APPLY [PayloadXML].nodes('/server/requests/Session.setDocumentRq/session/data/policy/AdditionalData') A (ad)
CROSS APPLY ad.nodes('KeyValuePair') k (kv)
WHERE k.kv.exist('Value/HHQuoteData') = 1 

补充说明:如果你的XML是标准键值对结构,即Key节点存储字段名、Value节点存储对应内容(Key的文本值为HHQuoteData,对应Value存目标数据),则需要将WHERE条件调整为k.kv.exist('Key[text()="HHQuoteData"]') = 1,查询时直接取对应Value节点内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:57:19