Sql WHERE子句的条件(全部或不相等)

Sql WHERE子句的条件(全部或不相等),sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我有一些身份,不知道有多少。我必须只给一个条件。比如说 @isIncludeClose是参数 SELECT * FROM tbl WHERE status = CASE WHEN @isIncludeClose = 1 THEN <all_status> ELSE <status != 'CL'> END 从tbl中选择* 哪里 地位= @isIncludeClose=1时的情况 然后 其他的 结束 您必须检查参数是否可用(包含值)。如果不是(为空),则返回全部,否则返

我有一些身份,不知道有多少。我必须只给一个条件。比如说

@isIncludeClose是参数

SELECT * FROM tbl
WHERE
status =
CASE WHEN @isIncludeClose = 1
THEN <all_status>
ELSE <status != 'CL'>
END
从tbl中选择*
哪里
地位=
@isIncludeClose=1时的情况
然后
其他的
结束

您必须检查参数是否可用(包含值)。如果不是(为空),则返回全部,否则返回所选记录

以下是一个查询示例:

SELECT
  *
FROM
  tbl
WHERE
  (@myParameter IS NULL OR myField = @myParameter)
  AND (@otherParameter IS NULL OR otherField = @otherParameter)
如果
@myParameter为NULL
,则每个记录的条件将求值为true,如果有值,则仅求值为true,其中目标字段包含指定的值(
myField=@myParameter

以你的例子:

SELECT
  *
FROM
  tbl
WHERE
  (@isIncludeClose != 1 OR status != 'CL')
使用T-SQL类似于:

IF @isIncludeClose = 1
BEGIN
    --select all
END
ELSE
   --specific !=
END 
或者一个肮脏的黑客(假设你没有空值)


谢谢@Pred。它对我有用。
SELECT * FROM tbl
WHERE status !=
      CASE WHEN @isIncludeClose != 1 THEN 'CL'
           ELSE ''
      END