在参数的基础上运行一个where子句条件

时间:2017-07-06 06:47:30

标签: sql sql-server database sql-server-2008

我有像这样的查询

Select * from table1 
where col1 = true or col2 = false or 
case when @param <> 2 then col3 = col4 end 

抛出错误的最后一个条件

 Incorrect syntax near '<'

3 个答案:

答案 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