Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在参数的基础上运行一个where子句条件_Sql_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

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
来处理。大小写表达式不会使用该列上存在的索引。但上述方法将使用索引。如果在这些列上没有可用的索引,两种方法将提供相同的性能@马赫什