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

SQL WHERE子句实现空值返回全量非空走LIKE模糊查询的方案

现有实现合规性判断

你调整后的写法是合规的,逻辑完全符合需求:

  • 当@SearchText为NULL时,@SearchText IS NULL判断为真,整个OR条件块返回真,返回全量数据
  • 当@SearchText非空时,走Title LIKE '%' + @SearchText + '%'的模糊匹配逻辑,只返回符合条件的结果

冗余点可以直接简化:title = title是恒真判断,没有实际作用,可以直接删掉,简化后逻辑不变:

AND (
    @SearchText IS NULL
    OR Title LIKE '%' + @SearchText + '%'
)

更优实现方案

1. 补全空字符串判断(匹配你的需求定义)

你的需求要求@SearchText为NULL或空时返回全量数据,现有写法只覆盖了NULL的场景,没有处理空字符串''的情况,可以用NULLIF函数简化处理:

SELECT [Category]
FROM [dbo].[Records]
WHERE 
    NULLIF(@SearchText, '') IS NULL
    OR Title LIKE '%' + @SearchText + '%'

NULLIF(@SearchText, '')会在参数为空字符串时返回NULL,就可以同时覆盖NULL、空字符串两种场景。

2. 性能优化(大数据量场景适用)

这种OR类型的动态查询很容易出现索引失效、参数嗅探问题,如果你的表数据量较大、查询频率高,可以加上重编译提示,让SQL Server每次根据参数实际值生成最优执行计划:

SELECT [Category]
FROM [dbo].[Records]
WHERE 
    NULLIF(@SearchText, '') IS NULL
    OR Title LIKE '%' + @SearchText + '%'
OPTION (RECOMPILE)

补充:你最初的CASE写法为什么报错

SQL Server中CASE是标量表达式,只能返回具体的值,不能直接返回title = title这类布尔判断结果,所以你的第一版写法存在语法错误,无法正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:45:01