SQL使用CASE应用WHERE



我不确定CASE是否是我真正需要在这里使用的,但基本上我要做的是应用"其中ba.batchid=@batchid";但仅当@batchId不为null时。

基本上是这样的,但这在ba.batchid='2'区域附近给出了一个错误('2'是@batchid的结果(。

CASE WHEN '2' != '' THEN ba.batchid = '2' ELSE null END

将Case语句视为标量值会有所帮助。您遇到的问题是由于在案例陈述中进行比较而导致的。基本上,您需要从案例陈述中提取比较。

我不确定您尝试使用的逻辑,但以下语法应该是正确的。

CASE WHEN '2' != '' THEN ba.batchid ELSE null END = '2'

请注意,="2"已移动到末尾。这样,case语句将根据WHEN语句返回batchid或null。然后将此值与"2"进行比较。

试试这个:

WHERE NULLIF(@batchId, '') IS NOT NULL AND ba.batchid = @batchid

第一个条件避免空("(以及带有@batchid的NULL。第二个将与表值匹配。

将它完全从语句的SELECT部分中取出,并放入WHERE子句(在FROM之后(

WHERE ba.batchid = @batchId
AND ba.batchid IS NOT NULL

注意,这里不需要AND ba.batchid为NOT NULL,因为第一行将过滤任何NULL。然而,有些SQL版本的情况并非如此,并且将其保留在查询中仍然有效,因此我将其保留

最新更新