在 WHERE 子句的 CASE 表达式中使用 LIKE 谓词

Using LIKE predicate inside CASE expression in WHERE clause

我有 table 个名字:

约翰
彼得
彼得-保罗
玛丽

我有一个包含这些名称的下拉列表,我在顶部添加了 'All' 作为选项。

我想将从下拉列表中选择的名称作为参数传递给 where 子句。

如果名称未作为 'All'

传递,我要做的只是使用 where 子句
SELECT City, State
FROM EmployeeDetails
WHERE @NAME =
              CASE @NAME
                         WHEN 'All' THEN '1=1'
              ELSE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

我无法让它工作。 ELSE 语句给出错误“单词 'LIKE'.

附近的语法不正确 查看我发现的其他 Whosebug 问题:

  1. CASE 语句 return 标量值,因此它不喜欢我的 LIKE 语句是有道理的。
  2. 将 ELSE 子句放在单引号中 return没有结果(中断 where 子句)
  3. 尝试执行 IF(@NAME = 'All') 会破坏 where 子句,并且在 Whosebug 上的每个问题中,共识是将 IF 语句转换为 CASE 语句。

当运行 WHERE 子句不在 CASE 语句中时,它适用于特定名称,例如:

WHERE (EmployeeDetails.NAME LIKE '' + @NAME + '%')

如果我搜索 Peter,它将 return 2 个符合预期的结果。玛丽1结果等
我显然不能将 'All' 传递给它。

不要在 where 中使用 case。简单地做:

SELECT City, State
FROM EmployeeDetails
WHERE (@NAME = 'All') OR (EmployeeDetails.NAME LIKE '' + @NAME + '%');

我不确定 '' + 的目的是什么,但你的问题中有它,所以我不说了。