SQL服务器中的条件筛选

时间:2011-07-06 13:14:19

标签: sql sql-server tsql sql-server-2008

我需要为搜索页面编写存储过程。搜索页面允许用户为某些过滤器选择“任意”,每个过滤器映射到我的数据库中的列。

在我的存储过程中处理此问题的最佳方法是什么:

(1)我应该使用动态SQL(sp_executesql)并根据所选的过滤器构建查询吗?这会对执行计划的缓存产生任何负面影响吗?

(2)我应该将“Any”翻译成所有可能的值并在静态查询中使用它吗?

(3)我是否应该使用强制过滤器将结果存储在临时表中,然后对这些结果逐个应用可选过滤器(支持任何选项)?

(4)我没有想到的任何其他方法?

1 个答案:

答案 0 :(得分:2)

在不知道用户如何选择过滤器的情况下,我会做这样的事情:

SELECT * FROM TABLE 
WHERE (FILTER_FOR_COL_A IS NULL OR COL_A = FILTER_FOR_COL_A) 
AND   (FILTER_FOR_COL_B IS NULL OR COL_B = FILTER_FOR_COL_B)

FILTER_FOR_COL_A是列COL_A的过滤器值。如果用户选择了ANY,则FILTER_FOR_COL_A将为NULL。显然,如果COL_A可以NULL并且用户应该能够将其指定为过滤器,则NULL不是表示ANY过滤器的最佳方式。您需要考虑另一个值或第二个参数。此外,如果用户可以为一列指定多个过滤器值,则此方法将不起作用。