Frage
Ich brauche ein Gitter auf einer Webseite angezeigt werden soll. Die Daten werden aus SQL Server 2008 über eine gespeicherte Prozedur. Da die sproc tausende Datensätze zurückgibt, entschied ich mich für eine Paging-Option zu gehen, die gut funktioniert. In der gespeicherten Prozedur, das tue ich etwas wie folgt aus:
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
Das funktioniert gut, solange der Benutzer glücklich ist, die Daten von Col1 sortiert zu bekommen. Wie konnte ich das umschreiben, wenn ich nicht weiß im Voraus, welche Spalte der Datensatzgruppe von zu sortier hat? Dies funktioniert nicht:
declare @RowIdMin int=10
declare @RowIdMax int=25
deklariert @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
Lösung
FROM MyTable ORDER BY CASE WHEN @ColSort = 'ABC' THEN ABC ....
Weitere ausführliche Erklärung
Andere Tipps
Dynamische SQL ist wahrscheinlich die beste Wahl; tauscht die Sortieroptionen in Ihrer row_number () Funktion aus. Sie können die Optionen im ExecuteSQL parametrieren zu sehen 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
ich völlig mit den anderen Beiträgen, dynamischer SQL oder einer CASE-Anweisung, um von einigen sind die Möglichkeiten, dies zu tun, wie Sie beschrieben haben.
Wie jedoch Nebenbei bemerkt, Blick auf den Rest des Rahmens Sie verwenden. Wenn seine asp.net 3.5 dann baute seine in Grids und Linq wird mit sehr wenig Aufwand für Sie all dies zu tun. Versuchen Sie suchen unter http://www.asp.net/learn .