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)
你不需要一个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)
这允许您只设置其中一个限制.