我有像这样的查询
Select * from table1
where col1 = true or col2 = false or
case when @param <> 2 then col3 = col4 end
抛出错误的最后一个条件
Incorrect syntax near '<'
答案 0 :(得分:3)
您不能使用CASE
表达式来控制SQL中的执行流。 CASE
是表达式,只返回标量值。
您可以改用以下谓词:
((@param <> 2 AND col3 = col4) OR (@param = 2))
因此,查询的WHERE
子句将如下所示:
WHERE (col1 = true) OR (col2 = false) OR ((@param <> 2 AND col3 = col4) OR (@param = 2))
答案 1 :(得分:2)
尝试以下
SELECT *
FROM TABLE1
WHERE ( COL1='TRUE' OR COL2='FALSE'
OR (@PARAM<>2 AND COL3=COL4) )
答案 2 :(得分:0)
我认为有问题的case
旨在表达谓词“当@param&lt;&gt; 2然后col3 = col4必须保持”。我还假设没有列可以为空。这非常正式地转换为!(@param <> 2) OR col3 = col4
,相当于@param = 2 OR col3 = col4
Select * from table1
where col1 = 'true' or col2 = 'false' or
@param = 2 OR col3 = col4