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