gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:20:58 32 4
gpt4 key购买 nike

基本上我必须从 SQL 数据库中构建项目列表,但是用户可以选择对 7 个过滤器的任意组合进行过滤,也可以选择要排序的列以及按方向排序。

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

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

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

  • 我不是第一个需要这样的解决方案的人,一定有比上述更好的方法吗?另外一个附带问题是,除了做很多 IF 之外,还有一种以参数化方式按方向排序的好方法。年代?

    最佳答案

    对于过滤,请使用 COELSCE 过滤条件的任何组合。在您的存储过程中,将有一个用户将搜索的所有参数的列表,然后在您的查询中将类似于:

     SELECT * 
    FROM YourTable t
    WHERE 1 = 1
    AND t.FirstColumn = COALESCE(@FirstColumnParam, t.FirstColumn)
    AND t.SecodndColumn = COALESCE(@SecondColumnParam, t.SecondColumn)
    ....

    如果任何参数为空,则跳过该条件。对于 1=1那是在没有过滤器代码传递给您的查询的情况下。

    订购:您可以使用 CASE按任何选定列排序的语句:
    ORDER BY ( CASE WHEN @OrderByParam = 1 Then FirstColumn ELSE .... END)

    关于sql - 排序、排序、筛选 SQL Server 的复杂组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11013950/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com