基本上,我必须从SQL数据库构建一个项目列表,但是用户可以选择筛选7个筛选器的任意组合,还可以选择一个列进行排序,也可以选择排序依据方向。
正如您可以想象的那样,这将以大量不同的编码组合结束,并且数据集非常大,所以我希望避免在应用程序中这样做。
到目前为止,我已经在我的存储过程中尝试过:
IF ELSE
语句来运行适当的参数化SQL但是,这很快就会变成一个巨大的树,并且将是一个噩梦。我不是第一个需要这样的解决方案的人,一定有比上面更好的方法吗?还有一个附带的问题,除了做大量的IF
之外,有没有一种好的方法来以参数化的方式按方向和按方向排序?
发布于 2012-06-13 19:42:01
对于筛选,请使用COELSCE
按任意条件组合进行筛选。在您的存储过程中,将有一个用户将搜索的所有参数的列表,然后在您的查询中将是如下所示:
SELECT *
FROM YourTable t
WHERE 1 = 1
AND t.FirstColumn = COALESCE(@FirstColumnParam, t.FirstColumn)
AND t.SecodndColumn = COALESCE(@SecondColumnParam, t.SecondColumn)
....
如果任何参数为null,则跳过该条件。对于1=1
,这是在没有过滤器条件传递给查询的情况下。
对于排序:您可以使用CASE
语句按任何选定的列排序:
ORDER BY ( CASE WHEN @OrderByParam = 1 Then FirstColumn ELSE .... END)
https://stackoverflow.com/questions/11013950
复制相似问题