문제

웹 페이지에 그리드를 표시해야합니다. 데이터는 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 또는 사례 명령문 순서에 대해 전적으로 동의합니다.

그러나 제쳐두고 사용하는 나머지 프레임 워크를 살펴보십시오. ASP.NET 3.5라면 그리드와 LINQ가 내장되어 거의 노력하지 않고이 모든 작업을 수행 할 것입니다. 보십시오 http://www.asp.net/learn.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top