0

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

DECLARE @flgParam bit

. .

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

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

4

3 回答 3

2

我在想这样的事情:

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

@flgparam 被声明为位,因此它只能采用NULL0和的值1

编辑:

我试图理解其中的逻辑。适合正确的名称:

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

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

于 2013-09-13T18:49:51.297 回答
1

有点粗糙,但它应该可以工作,根据要求:

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

在 sqlfiddle 上测试

于 2013-09-13T19:10:38.887 回答
0

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

于 2013-09-13T18:51:39.073 回答