【问题标题】:Order By using parameter varchar(100)使用参数 varchar(100) 排序
【发布时间】:2016-05-10 03:33:14
【问题描述】:

如果参数中的列超过 1 列,我可以通过传递参数来执行"ORDER BY" 吗? 例如,parameter 是 'number asc,name' ,我如何使用传递给order by 的参数?

【问题讨论】:

  • 试试动态sql。或者将排序参数分解为多个参数,然后在 ORDER BY 中使用 case 语句。见brentozar.com/archive/2014/01/dynamic-sorting
  • 这个参数怎么存到表里?以同样的方式?
  • @DK 好的先生,我会尝试这个建议,非常感谢
  • 我已经尝试阅读解释并尝试使用动态 sql 但我认为它似乎有点令人困惑@DK
  • 有什么困惑?如果您需要进一步的帮助,请发布一些代码。

标签: sql-server sql-order-by parameter-passing


【解决方案1】:

你可以在这里使用CASE..WHEN..

示例:

SELECT * FROM @table
ORDER BY (CASE @SortItem WHEN 'number asc' THEN number END) asc,
         (CASE @SortItem WHEN 'name desc' THEN name END) desc

【讨论】:

  • 所以我们需要写出所有可能发生的情况? @AbdulRasheed
  • 用于动态排序,是的。否则你可以尝试动态sql,但这不是一个好习惯。
  • 动态sql有点难理解,我试了一下,失败了@AbdulRasheed
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2023-04-04
相关资源
最近更新 更多