首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >排序、排序、筛选SQL Server的复杂组合

排序、排序、筛选SQL Server的复杂组合
EN

Stack Overflow用户
提问于 2012-06-13 19:30:08
回答 1查看 1.6K关注 0票数 4

基本上,我必须从SQL数据库构建一个项目列表,但是用户可以选择筛选7个筛选器的任意组合,还可以选择一个列进行排序,也可以选择排序依据方向。

正如您可以想象的那样,这将以大量不同的编码组合结束,并且数据集非常大,所以我希望避免在应用程序中这样做。

到目前为止,我已经在我的存储过程中尝试过:

  • 构建查询字符串,虽然这非常简单且易于遵循,但它会使应用程序对SQL注入开放,因此我宁愿避免这种情况。
  • 使用一组IF ELSE语句来运行适当的参数化SQL但是,这很快就会变成一个巨大的树,并且将是一个噩梦。

我不是第一个需要这样的解决方案的人,一定有比上面更好的方法吗?还有一个附带的问题,除了做大量的IF之外,有没有一种好的方法来以参数化的方式按方向和按方向排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-13 19:42:01

对于筛选,请使用COELSCE按任意条件组合进行筛选。在您的存储过程中,将有一个用户将搜索的所有参数的列表,然后在您的查询中将是如下所示:

代码语言:javascript
复制
 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语句按任何选定的列排序:

代码语言:javascript
复制
ORDER BY ( CASE WHEN @OrderByParam = 1 Then FirstColumn ELSE .... END)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11013950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档