在SQL查询中,包含
... WHERE MYID = @1 ....
我必须管理2个案件 1)列上有一个过滤器,@ 1将是一个数字(1,2,X ......)
2)该列上没有过滤器,@ 1将是......? ( ANY )
是否存在“any”(SQL Server 2005)?
PS。
显然,我明白我可以删除“where”。
PPS。
我解释自己是为了更好地理解:我在代码中有这个查询,并希望在过滤器打开时传递一个整数作为参数,当我的过滤器关闭时传递“某事”。
if (filterOn)
GetFoos(fooID);
else
GetFoos("ANY");
GetFoos(param1): "select * from FOOS where FOOID = {0}", param1
答案 0 :(得分:2)
制作两个陈述中的UNION ALL
:
SELECT *
FROM mytable
WHERE myid = @col
UNION ALL
SELECT *
FROM mytable
WHERE @col IS NULL
或者只是将它们拆分为存储过程的IF / ELSE
块。
无论哪种方式,优化器都可以单独优化查询,完全忽略其中一个查询,具体取决于@col
的值。
答案 1 :(得分:1)
你可以沿着这条线做点什么:
where (myid = @id or @id is null)
因此,您只会在@id
包含值时进行过滤,而不是在null
时进行过滤。
答案 2 :(得分:0)
如果该列上没有过滤器,只需删除where或AND子句。
答案 3 :(得分:0)
如果您不想对特定列进行过滤,请不要对该列进行过滤。完全删除WHERE MYID =
答案 4 :(得分:0)
有
"select * from FOO where FOOID = {0}", param
当没有要过滤的参数时使用param =“FOOID”,这将给出
select * from FOO where FOOID = FOOID // removing the filter