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

SQL Server 2008中获取首个Test节点对应V值的XQuery问题

问题描述

我有如下简化的XML数据存储在SQL列中:

<Values>
  <Value>
    <N>Test</N>
    <V>FindMe</V>
  </Value>
  <Value>
    <N>Test</N>
    <V>NotMe</V>
  </Value>
  <Value>
    <N>Other Value</N>
    <V>NotMe</V>
  </Value>
</Values>

需要获取第一个<N>节点值为Test的<Value>节点对应的<V>值。由于SQL Server 2008所用的XPath版本不支持following-sibling语法,参考资料尝试用>>运算符编写的查询执行时报错:

XQuery [A.x.query()]: '>>' requires a singleton (or empty sequence), found operand of type 'element(N,xdt:untyped) *'
解决方案

直接定位到第一个满足条件的<Value>节点,再提取其下的<V>节点即可,无需使用>>运算符:

查询XML节点

SELECT
    A.x,
    A.x.query('/Values/Value[N = "Test"][1]/V') AS Result
FROM (
    SELECT CAST('<Values><Value><N>Test</N><V>FindMe</V></Value><Value><N>Other Value</N><V>NotMe</V></Value></Values>' AS XML) x
) A

直接获取文本值

如果需要直接返回<V>的文本内容,使用value()方法更高效:

SELECT
    A.x,
    A.x.value('(/Values/Value[N = "Test"][1]/V/text())[1]', 'nvarchar(100)') AS Result
FROM (
    SELECT CAST('<Values><Value><N>Test</N><V>FindMe</V></Value><Value><N>Other Value</N><V>NotMe</V></Value></Values>' AS XML) x
) A
原理说明

SQL Server 2008的XQuery支持通过路径表达式直接筛选节点:

  • /Values/Value[N = "Test"][1] 精准定位到第一个<N>值为Test的<Value>节点
  • 后续的/V直接提取该节点下的<V>元素,完全避开了>>运算符对单例操作数的要求,从根源解决报错问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:45:31