관리 메뉴

IT 쟁이

Paging of Large Resultsets in ASP.NET(2) RowCount 본문

ASP.NET Ex

Paging of Large Resultsets in ASP.NET(2) RowCount

클라인STR 2008. 2. 12. 23:36

RowCount

The base logic of this method relies on the SQL SET ROWCOUNT expression to both skip the unwanted rows and fetch the desired ones:

DECLARE @Sort /* the type of the sorting column */
SET ROWCOUNT @StartRow
SELECT @Sort = SortColumn FROM Table ORDER BY SortColumn
SET ROWCOUNT @PageSize
SELECT ... FROM Table WHERE SortColumn >= @Sort ORDER BY SortColumn

Full Code – Paging_RowCount

Full Code는 다수의 긴 저장프로시저 구문으로 구성되어 있습니다.  눈에뛰는것만 간단하게 언급하도록 하겠습니다.


먼저 SET ROWCOUNT 구문에 대해서 알아야 합니다.

SET ROWCOUNT 옵션을 지정하면 대부분의 Transact-SQL 문이 지정한 행 수에 영향을 받게 될 때 처리를 중지합니다. 트리거 및 INSERT, UPDATE, DELETE와 같은 데이터 수정 문이 이에 포함됩니다. ROWCOUNT 옵션은 동적 커서에는 영향을 주지 않지만 키 집합 및 INSENSITIVE 커서의 행 집합을 제한합니다. 이 옵션을 사용할 때는 주의를 기울여야 하며 기본적으로 SELECT 문과 함께 사용해야 합니다.
예를 들어서 ROWCOUNT 값을 4라고 하면  4번째 행까지만 SELECT 구문의 값이 실행됩니다.

SET ROWCOUNT 4
SELECT * FROM MyBoard


사용자 삽입 이미지


/*Default Page Number*/
IF @PageNumber < 1  
 SET @PageNumber = 1
기본값으로 폐이지넘버의 값이 1보다 작은경우는 1로 설정해줍니다.
@PageNumber는 현재 폐이지의 인덱스 번호를 나타냅니다. 현재 폐이지가 2폐이지일 경우는 2가 됩니다.

/*Set paging variables.*/
SET @strPageSize = CAST(@PageSize AS varchar(50))
SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))
폐이징 변수값을 설정해줍니다. CAST()구문을 이용해서 PageSIze값을 변수에 저장합니다.
그리고 @sttStartRow 변수값은 SET ROWCOUNT 시 몇행까지 읽어 내릴 것인지를 정하는 값입니다.

이때 현재 폐이지값이 2이고 폐이지 사이즈값이 3일경우 StartRow값을 계산하면
((2-1)*3+1) = 4가 됩니다.

Set rowcount  @StartRow
Select @SortColumn= seq  from Myboard  ORDER BY seq DESC

@SortColumn은 SELECT 쿼리문에서 마지막에 읽어오는 컬럼의 seq 값을  뜻합니다.  =_= 이거 땜에 엄청시간걸렸내요..

이렇게 하면  @SortColumn은   레코드로 부터 가장마지막에 읽어온 seq 값을 가집니다.

현재 페이지값이 2이면  (현제페이지 -  1)* 폐이지사이즈 + 1의 값은 4가되므로 SET ROWCOUNT 4 가되며
SET ROWCOUNT 4
SELECT SEQ FROM MYBOARD ORDER BY SEQ DESC

사용자 삽입 이미지
다음과 같은 결과가 출력됩니다. 그리고 seq의 마지막 값은 3이 됩니다.

폐이지의 사이즈가 3이 므로 ROWCOUNT 3으로 하고  마지막에 seq값이 3이므로 밑에 쿼리문처럼 seq의 값이 3보다 작거나 같은 레코드의 값을 가지고 옵니다. 이를 실행하면 다음과 같이 3,2,1인 2폐이지의 데이터를 볼수 있게됩니다.
SELECT * FROM MyBoard where seq<=3 order by seq desc

SET ROWCOUNT 3
SELECT * FROM MyBoard where seq<=3 order by seq desc

사용자 삽입 이미지


간단하게 저장 프로시저를 작성해 봅니다.

사용자 삽입 이미지


exec MyBoardList 2, 3 SQL쿼리분석기를 통해 테스트해본결과 입니다.

사용자 삽입 이미지

Comments