Sql 在参数的基础上运行一个where子句条件
我有这样的疑问Sql 在参数的基础上运行一个where子句条件,sql,sql-server,database,sql-server-2008,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 从表1中选择* 其中col1=true或col2=false或 当@param 2然后col3=col4结束时的情况 where中的最后一个条件是抛出错误 Incorrect syntax near '<' “附近的语法不正确您不能使用大小写表达式来
Select * from table1
where col1 = true or col2 = false or
case when @param <> 2 then col3 = col4 end
从表1中选择*
其中col1=true或col2=false或
当@param 2然后col3=col4结束时的情况
where中的最后一个条件是抛出错误
Incorrect syntax near '<'
“附近的
语法不正确您不能使用大小写表达式来控制SQL中的执行流CASE
是一个只返回标量值的表达式
您可以改为使用以下谓词:
((@param <> 2 AND col3 = col4) OR (@param = 2))
不能使用CASE
表达式来控制SQL中的执行流CASE
是一个只返回标量值的表达式
您可以改为使用以下谓词:
((@param <> 2 AND col3 = col4) OR (@param = 2))
试试下面这样
SELECT *
FROM TABLE1
WHERE ( COL1='TRUE' OR COL2='FALSE'
OR (@PARAM<>2 AND COL3=COL4) )
选择*
来自表1
其中(COL1='TRUE'或COL2='FALSE'
或(@PARAM2和COL3=COL4))
试试下面的方法
SELECT *
FROM TABLE1
WHERE ( COL1='TRUE' OR COL2='FALSE'
OR (@PARAM<>2 AND COL3=COL4) )
选择*
来自表1
其中(COL1='TRUE'或COL2='FALSE'
或(@PARAM2和COL3=COL4))
我假设所讨论的case
用于表示谓词“当@param 2时,col3=col4必须保持”。为了简单起见,我还假设没有任何列是可为空的。这相当正式地翻译成!(@param 2)或col3=col4
,相当于@param=2或col3=col4
Select * from table1
where col1 = 'true' or col2 = 'false' or
@param = 2 OR col3 = col4
我假设所讨论的case
是为了表示谓词“当@param 2时,那么col3=col4必须保持”。为了简单起见,我还假设没有任何列是可为空的。这相当正式地翻译成!(@param 2)或col3=col4
,相当于@param=2或col3=col4
Select * from table1
where col1 = 'true' or col2 = 'false' or
@param = 2 OR col3 = col4
你能试着用一下吗!=如果您真的想在where
子句或此处使用case
,您可以参考此答案,而不是:请尝试使用!=如果您真的想在where
子句中或此处使用(@PARAM2和COL3=COL4))
gud one bro中使用case
,则可以参考此答案。但是我们不能像你之前告诉我的那样用case语句来处理这个问题吗?你也可以用case
来处理。大小写表达式不会使用该列上存在的索引。但上述方法将使用索引。如果在这些列上没有可用的索引,两种方法将提供相同的性能@Mahesh.K(@PARAM2和COL3=COL4))
gud one bro。但是我们不能像你之前告诉我的那样用case语句来处理这个问题吗?你也可以用case
来处理。大小写表达式不会使用该列上存在的索引。但上述方法将使用索引。如果在这些列上没有可用的索引,两种方法将提供相同的性能@马赫什