T-SQL: ORDER BY 'Выражение' - PullRequest
       35

T-SQL: ORDER BY 'Выражение'

0 голосов
/ 23 октября 2011

Все хранимые процедуры, которые возвращают данные на уровень представления веб-службы, которую я сейчас разрабатываю, принимают в качестве параметров два целых числа, @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 Ответ

2 голосов
/ 23 октября 2011

Вы можете использовать case.В этом примере сортируется по Col1, когда @SortParameter равно 1. Для параметра 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 вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...