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   
War es hilfreich?

Lösung

FROM MyTable ORDER BY CASE WHEN @ColSort = 'ABC' THEN ABC ....

Weitere ausführliche Erklärung

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

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top