T-SQL:ORDER BY'Expression'

时间:2011-10-23 17:27:37

标签: tsql sorting dynamic-sql

将数据返回到我当前正在开发的Web服务的表示层的所有存储过程都将参数作为参数两个整数@StartingRow@MaximumRows,这样我就可以在不检索整个结果列表的情况下对结果进行分页每次。现在我想在这些过程中引入排序,但是从我看到的每个人都使用动态SQL来进行排序:

EXEC ( 'WITH [Results] AS 
        ( SELECT * , 
             ROW_NUMBER() OVER ( ORDER BY ' + @SortExpression + @Direction + ')  AS 'RowNumber' 
          FROM [SomeTable] ) 
        SELECT [Column1] , [Column2] 
        WHERE ( [RowNumber] BETWEEN ' + @StartingRow + 
                          ' AND ( ' + @StartingRow + ' + ' + @MaximumRows + ' - 1) )' )

这种方法的问题在于,由于客户的需求,我无法使用动态SQL,因此我无法根据结果进行排序来指定列。那么我有什么选择呢?

1 个答案:

答案 0 :(得分:2)

您可以使用case。当Col1等于1时,此示例在@SortParameter上排序。对于参数5,它按Col2降序排序。

order by
        case 
        when @SortParameter = 1 then Col1
        when @SortParameter = 2 then Col2
        ...
        end
,       case 
        when @SortParameter = 4 then Col1
        when @SortParameter = 5 then Col2
        ...
        end DESC

SQL Server无法使用此方法使用索引。这是使用动态SQL的主要原因。