首页 > 解决方案 > SQL Server 使用大小写动态添加条件

问题描述

在我的 SQL Server 存储过程中,我想添加一个Where动态子句,如下所示:

AND CASE WHEN @mySt <> '' THEN s.myStatus IN(@mySt) ELSE 0=0 END

当我要检查的是:如果@mySt不为空,我要添加s.myStatus IN(@mySt).

如果 if@mySt为空,我想跳过这个where子句。

我收到一个错误

'IN' 附近的语法不正确

标签: sql-serverstored-procedures

解决方案


CASE是一个表达式,它返回一个标量值而不是布尔结果;你不能想要你想要做的,因为s.myStatus IN(@mySt)它不是一个标量值。

使用正确的布尔逻辑:

AND (s.myStatus = @mySt OR @mySt IS NULL) --I suggest NULL over a blank string

我替换IN=, as@mySt是一个标量值,所以IN=将是同义词。


推荐阅读