Question

Je dois afficher une grille sur une page Web. Les données proviendront de SQL Server 2008 via une procédure stockée. Comme le sproc renvoie des milliers d'enregistrements, j'ai décidé de choisir une option de pagination qui fonctionne bien. Dans la procédure stockée, je fais quelque chose comme ceci:

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    

Cela fonctionne bien tant que l'utilisateur souhaite que les données soient triées par Col1. Comment pourrais-je réécrire ceci si je ne sais pas à l'avance quelle colonne le jeu d'enregistrements doit être trié? Cela ne fonctionne pas:

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

declare @ColSort varchar (100) = 'MaColonne'

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   
Était-ce utile?

La solution

À PARTIR DE MyTable ORDER BY CASE WHEN @ColSort = 'ABC' ALORS ABC ....

Explication plus approfondie

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

Autres conseils

Le SQL dynamique est probablement votre meilleur choix. remplacez les options de tri dans votre fonction row_number (). Vous pouvez également paramétrer les options dans executesql. Voir 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

Je suis tout à fait d’accord avec les autres publications, le SQL dynamique ou une instruction CASE en fonction des options proposées.

Cependant, regardons le reste du cadre que vous utilisez. Si son asp.net 3.5, alors ses grilles intégrées et linq feront tout cela pour vous avec très peu d'effort. Essayez de regarder http://www.asp.net/learn .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top