Вопрос

Мне нужно отобразить сетку на веб-странице.Данные будут поступать из SQL Server 2008 с помощью хранимой процедуры.Поскольку sproc возвращает тысячи записей, я решил выбрать опцию подкачки, которая работает нормально.В хранимой процедуре я делаю что-то вроде этого:

declare @RowIdMin int=10  
declare @RowIdMax int=25  

select * 
from (select Col1, Col2, ROW_NUMBER() over (order by Col1 desc) as RowId  
      from MyTable ) dt  
where RowId BETWEEN @RowIdMin AND @RowIdMax    

Это работает нормально до тех пор, пока пользователь рад получать данные, отсортированные по Col1.Как я мог бы переписать это, если я заранее не знаю, по какому столбцу должен быть отсортирован набор записей?Это не сработает:

declare @RowIdMin int=10  
declare @RowIdMax int=25  

объявить @ColSort varchar(100)='MyColumn'

select * 
from (select Col1, Col2, ROW_NUMBER() over (order by <b>@ColSort</b> desc) as RowId  
from MyTable) dt  
where RowId BETWEEN @RowIdMin AND @RowIdMax   
Это было полезно?

Решение

Из моей таблицы УПОРЯДОЧИВАЕТСЯ ПО РЕГИСТРУ, КОГДА @ColSort = 'ABC', ЗАТЕМ ABC ....

Более подробное объяснение

http://www.extremeexperts.com/sql/articles/CASEinORDER.aspx

Другие советы

Динамический SQL, вероятно, ваш лучший выбор;поменяйте местами параметры сортировки в вашей функции row_number().Вы также можете параметризовать параметры в executesql, см. msdn

declare @SQLScript nVarchar(4000)

declare @RowIdMin int=10
declare @RowIdMax int=25
declare @ColSort varchar(100)='MyColumn'


Select @SQLScript = 'select * from (select Col1, Col2, ROW_NUMBER() over (order by ' + @ColSort + 'desc) as RowId from MyTable  dt where RowId BETWEEN ' + cast(@RowIdMin as nvarchar(100))+ ' AND ' + cast(@RowIdMax as nvarchar(100))

exec sp_executesql @SQLScript

Я полностью согласен с другими сообщениями, динамический SQL или оператор CASE order by - это варианты, позволяющие сделать это так, как вы описали.

Однако, в качестве отступления, посмотрите на остальную часть фреймворка, который вы используете.Если это asp.net 3.5, то его встроенные сетки и linq сделают все это за вас с минимальными усилиями.Попробуйте посмотреть на http://www.asp.net/learn.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top