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

SQL Server中XQuery的Exist()子句多条件使用方法咨询

SQL Server XQuery exist() 多条件查询方法

你原有查询的错误点在于:节点文本内容不能直接用value引用,@Name是属性的标准引用语法,节点文本需要通过text()函数获取,同时exist()返回BIT类型值,需要显式判断等于1才会按「节点存在」过滤结果。

修正后的基础查询(单节点同时匹配属性+节点值)

SELECT *
FROM A
WHERE XmlList.exist(N'/Property/Value[@Name="Patt1" and text()="Pval1"]') = 1

你也可以用.代表当前节点本身来匹配值,写法如下:

SELECT *
FROM A
WHERE XmlList.exist(N'/Property/Value[@Name="Patt1" and .="Pval1"]') = 1

更多多条件场景用法

  • 单个节点多属性+值同时匹配
    如果需要匹配单个节点的多个属性+节点值,直接在方括号内用and拼接所有条件即可,示例:

    -- 匹配Name为Patt1、Type属性为String、值为Pval1的Value节点
    SELECT *
    FROM A
    WHERE XmlList.exist(N'/Property/Value[@Name="Patt1" and @Type="String" and text()="Pval1"]') = 1
    
  • 多个不同节点同时存在匹配
    如果需要同时满足多个不同的Value节点都存在,有两种常用写法:

    -- 写法1:多个exist条件拼接,可读性更高
    SELECT *
    FROM A
    WHERE XmlList.exist(N'/Property/Value[@Name="Patt1" and text()="Pval1"]') = 1
      AND XmlList.exist(N'/Property/Value[@Name="patt2" and text()="Pval2"]') = 1
    
    -- 写法2:单个exist中写多节点匹配逻辑
    SELECT *
    FROM A
    WHERE XmlList.exist(N'/Property[Value[@Name="Patt1" and text()="Pval1"] and Value[@Name="patt2" and text()="Pval2"]]') = 1
    

注意:XQuery对大小写敏感,属性名、属性值、节点值的大小写都需要和实际XML存储的内容完全一致才能匹配成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:02