SQL:哪里MYID = ANY?

时间:2011-04-22 10:43:02

标签: sql sql-server-2005

在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

5 个答案:

答案 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
相关问题