我有一个小的选择查询,它根据传递给过程的参数从表中选择数据。
DECLARE @flgParam bit
. .
SELECT *
FROM tablename
WHERE flgRequired like <If @flgparam is 0 then 1 or zero , Else 1>
构造 where 子句的最佳方法是什么
我有一个小的选择查询,它根据传递给过程的参数从表中选择数据。
DECLARE @flgParam bit
. .
SELECT *
FROM tablename
WHERE flgRequired like <If @flgparam is 0 then 1 or zero , Else 1>
构造 where 子句的最佳方法是什么
我在想这样的事情:
SELECT *
from tablename
where @flgparam is null or @flgcolumnval = @flgparam;
@flgparam 被声明为位,因此它只能采用NULL
、0
和的值1
。
编辑:
我试图理解其中的逻辑。适合正确的名称:
SELECT *
from sample
where (@flgparam = 0 and flgRequired is not null) or
(coalesce(@flgparam, 1) = 1 and flgRequired = 1)
like
是不必要的;你可以做严格的平等。
有点粗糙,但它应该可以工作,根据要求:
select
S.itemname
,S.flgrequired
from
sample S
where
(S.flgRequired >= @flgParam)
您不能使用变量来替换查询中的列,以实现您应该将查询创建为字符串@QUERY
并使用执行它exec @QUERY