我有一个小的select查询,它根据传递给过程的参数从表中选择数据。
DECLARE @flgParam bit
。
SELECT *
FROM tablename
WHERE flgRequired like <If @flgparam is 0 then 1 or zero , Else 1>
构造where子句的最佳方法是什么
答案 0 :(得分:2)
我在想这样的事情:
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
是不必要的;你可以做到严格平等。
答案 1 :(得分:1)
有点粗糙,但根据要求它应该有效:
select
S.itemname
,S.flgrequired
from
sample S
where
(S.flgRequired >= @flgParam)
答案 2 :(得分:0)
您无法使用变量替换查询中的列,以实现您应该将查询创建为字符串@QUERY
并使用exec @QUERY
执行它