具有动态条件的where子句的SELECT语句

时间:2013-09-13 18:43:57

标签: sql sql-server select

我有一个小的select查询,它根据传递给过程的参数从表中选择数据。

DECLARE @flgParam bit

SELECT * 
FROM tablename 
WHERE flgRequired like <If @flgparam is 0 then 1 or zero , Else 1>

构造where子句的最佳方法是什么

3 个答案:

答案 0 :(得分:2)

我在想这样的事情:

SELECT *
from tablename
where @flgparam is null or @flgcolumnval = @flgparam;

@flgparam被声明为一点,因此它只能采用NULL01的值。

编辑:

我正在努力理解逻辑。改编为正确的名称:

SELECT *
from sample
where (@flgparam = 0 and flgRequired is not null) or
      (coalesce(@flgparam, 1) = 1 and flgRequired = 1)

like是不必要的;你可以做到严格平等。

答案 1 :(得分:1)

有点粗糙,但根据要求它应该有效:

select
  S.itemname
  ,S.flgrequired
from 
  sample S
where 
  (S.flgRequired >= @flgParam)

Tested on sqlfiddle

答案 2 :(得分:0)

您无法使用变量替换查询中的列,以实现您应该将查询创建为字符串@QUERY并使用exec @QUERY执行它