使用Like运算符的Where子句中的CASE语句

Siv*_*iva 0 sql t-sql sql-server where-clause

我在where子句中使用CASE表达式时面临一个问题,据我所知,语法正确但是出错了.以下是我的代码:

Where
CASE 
            WHEN (@ItemFor='' and @ItemTo='')
            THEN id like '%'
            ELSE id between @ItemFor and @ItemTo
        END
Run Code Online (Sandbox Code Playgroud)

上面的代码对我来说是正确的,但我得到语法错误说

关键字'like'附近的语法不正确.

编辑

我有4组参数,都需要转到where子句,所有都是字符串值:

WHERE

        CASE 
            WHEN (@ItemFor='' and @ItemTo='')
                THEN id like '%'
                ELSE id between @ItemFor and @ItemTo
        END
    AND 
        CASE 
            WHEN (@CodeFrom='' and @CodeTo='')
            THEN Code like '%'
            ELSE code between @CodeFrom and @CodeTo
        END
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

你不需要一个case表达式.做就是了:

where ((@ItemFor = '' and @ItemTo = '') or
       id between @ItemFor and @ItemTo
      )
Run Code Online (Sandbox Code Playgroud)

您的版本不起作用,因为SQL Server没有布尔变量.你的case表达式试图返回一个布尔表达式,但这样的表达式不是值.

顺便说一下,你可能打算:

where (id >= @itemfrom or @itemfrom = '') and
      (id <= @itemto or @itemto = '')
Run Code Online (Sandbox Code Playgroud)

这允许您只设置其中一个限制.