Domanda

Devo visualizzare una griglia su una pagina web. I dati verranno da SQL Server 2008 tramite una procedura memorizzata. Dato che lo sproc restituisce migliaia di record, ho deciso di optare per un'opzione di paging che funziona bene. Nella procedura memorizzata, faccio qualcosa del genere:

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    

Funziona bene fintanto che l'utente è felice di ottenere i dati ordinati per Col1. Come posso riscriverlo se non so in anticipo per quale colonna deve essere ordinato il recordset? Questo non funziona:

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

dichiara @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   
È stato utile?

Soluzione

DA MyTable ORDINA PER CASO QUANDO @ColSort = 'ABC' POI ABC ....

Spiegazione più approfondita

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

Altri suggerimenti

Dynamic SQL è probabilmente la soluzione migliore; scambia le opzioni di ordinamento nella tua funzione row_number (). Puoi parametrizzare le opzioni anche in executesql vedi 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

Sono totalmente d'accordo con gli altri post, SQL dinamico o un ordine CASE in base alle opzioni per fare ciò come hai descritto.

Tuttavia, a parte, guarda il resto del framework che stai utilizzando. Se è asp.net 3.5, allora le sue griglie e linq integrate faranno tutto questo per te con il minimo sforzo. Prova a guardare http://www.asp.net/learn .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top