我可以参数化排序列和排序方向的任何方式?

时间:2018-02-19 16:09:50

标签: sql sql-server sql-server-2012

我有一个非常大的存储过程,最后生成一个表。我需要通过指定的列和方向动态排序此表。有没有办法做到这一点,而不必将我的SQL放入一个字符串,然后执行字符串? proc已经非常庞大,有大约15个IF语句,所有这些语句都生成相同的表,但根据哪个IF语句被命中,数据不同,总共大约1200行。那里有12列,显然有2个排序方向,所以如果我要在@SortDirection和@SortColumn的每一个前面放置一个IF语句,我会考虑重写程序360 IF语句!

这可以动态完成而不必将其全部放入一个大型复杂的字符串中,然后执行该字符串吗?我使用的是SQL Server 2012。

1 个答案:

答案 0 :(得分:1)

12列应该是24个排序表达式:

order by (case when @col = 'column1' and @dir = 'asc' then column1 end) asc,
         (case when @col = 'column1' and @dir = 'desc' then column1 end) desc,
         . . .

不是微不足道的,但肯定不是360条件表达式: