WHERE CLAUSE条件时的情况(所有条件或不等于)

时间:2014-12-19 13:20:08

标签: sql tsql sql-server-2012

我有一些地位',不知道有多少。我必须只为一个条件。例如

@isIncludeClose是参数。

SELECT * FROM tbl
WHERE
status =
CASE WHEN @isIncludeClose = 1
THEN <all_status>
ELSE <status != 'CL'>
END

2 个答案:

答案 0 :(得分:2)

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

以下是一个示例查询:

SELECT
  *
FROM
  tbl
WHERE
  (@myParameter IS NULL OR myField = @myParameter)
  AND (@otherParameter IS NULL OR otherField = @otherParameter)

如果@myParameter IS NULL,那么每条记录的条件都会变为true,如果它有一个值,它只会变为true,其中目标字段包含指定的值(myField = @myParameter

用你的例子:

SELECT
  *
FROM
  tbl
WHERE
  (@isIncludeClose != 1 OR status != 'CL')

答案 1 :(得分:0)

使用T-SQL,如:

IF @isIncludeClose = 1
BEGIN
    --select all
END
ELSE
   --specific !=
END 

或一个肮脏的黑客(假设你没有空值)

SELECT * FROM tbl
WHERE status !=
      CASE WHEN @isIncludeClose != 1 THEN 'CL'
           ELSE ''
      END