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

单激活参数下WHERE子句AND/OR逻辑失效问题求助

问题分析与解决

核心错误点

  1. 字段名拼写不一致

    • WHERE子句中写的assignmentRecordID(大写D)和SELECT里的assignmentRecordId(小写d)存在大小写差异,如果你的数据库使用区分大小写的排序规则,会导致匹配失败,找不到对应记录。
    • WHERE子句里的activity_id字段名错误,SELECT中明确写的是activityId(无下划线),这里应该改成activityId = @activity_id。
  2. 逻辑理解误区
    你改用OR后返回全部记录的原因是:当其中一个参数为NULL时,@参数 IS NULL会判定为true,OR连接的条件整体就为true,相当于直接跳过了这部分过滤;再加上如果@Search为空,就会返回表中所有记录,完全不符合你的需求。

修正后的SQL代码

SELECT DISTINCT
    assignmentRecordId,
    activityId,
    activityType,
    activityTitle,
    activityDescription
FROM dbo.Activity
WHERE 
    (@assignmentRecordId IS NULL OR assignmentRecordId = @assignmentRecordId)
    AND (@activity_id IS NULL OR activityId = @activity_id)
    AND (@Search = '' OR (
        assignmentRecordId LIKE '%' + @Search + '%'
        OR activityNumber LIKE '%' + @Search + '%'
        OR activityTitle LIKE '%' + @Search + '%'
    ))

逻辑说明

保持AND连接两个参数条件的逻辑是正确的:

  • 当@assignmentRecordId非空时,仅返回assignmentRecordId匹配的记录;
  • 当@activity_id非空时,仅返回activityId匹配的记录;
  • 当两个参数都为空时,不限制这两个条件,仅按@Search的内容过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:43:16