2011-03-19 2 views
1

테이블에 10,000 개의 레코드가있는 경우처럼 데이터베이스 측 페이징을 사용해야합니다. 그런 다음 처음으로 100 개 레코드를 가져와야합니다. SQL Server 2005를 사용하고 있습니다. 저장 프로 시저 코드를 제공하십시오. 그것은 서버 측 페이징을 수행하는 (내 경우) 가장 효율적인 방법이 될 입증되었습니다 2005 년데이터베이스 쪽 페이징

+0

는 (무료) 등록이 필요하지만,이 두 부분 시리즈 http://www.sqlservercentral.com/articles/paging/69892/ –

답변

2

당신은 SQL 서버부터 사용할 수있는 ROW_NUMBER() 기능을 살펴 있어야합니다.

예 :

SELECT * 
FROM (
    SELECT col1, col2, col3, 
      ROW_NUMBER() OVER(ORDER BY col1 ASC) AS rownbr 
    FROM table 
    WHERE col2 = 'something' 
) AS Query 
WHERE rownbr BETWEEN 1 AND 10 
ORDER BY rownbr 

당신은 당신이 OVER() 문에 의한 주문 할 열 및 WHERE 문 외부에서 검색 할 첫 번째와 마지막 행을 설정할 수 있습니다. 당신은 실제로 당신이 페이지 번호가 페이지를 시도하는 경우

1

, 당신은 다음과 같이 뭔가를 할 수 있습니다

Create Procedure GetPagedStuff(@PageNumber int, @PageSize int) 
As 

;With RankedRows As 
    (
    Select ... 
     , Row_Number() Over (Order By SomeColumn) As Num 
     , Count(NonNullColumn) Over() As TotalRows 
    From MyTable 
    ) 
Select ... 
From RankedRows 
Where Num > (@PageNumber - 1) * @PageSize 
    And Num <= @PageNumber * @PageSize 

Return 

-- example call 
Exec GetPagedStuff @PageNumber = 1, @PageSize = 100 
1

제이슨 토마스, ROW_NUMBER() 함수는 가장 좋은 건입니다 제안한다. 그러나 WHERE 절을 만족하는 레코드 수가 매우 많으면 기본 키를 검색 한 다음 하위 테이블을 동일한 테이블로 다시 결합하여 다른 열을 얻을 수 있습니다.

예 :

SELECT e.col1, e.col2, e.col3 
FROM Table1 e 
JOIN 
(SELECT ID, rownum= ROW_NUMBER() 
FROM Table1 
WHERE col1 = @filterParam 
ORDER BY LastName) 
f ON f.ID = e.ID 
WHERE f.rownum BETWEEN 100 AND 150 
2
DECLARE @PageSize INT, 
    @PageNumber INT, 
    @FirstRow INT, 
    @LastRow INT 

SELECT @PageSize = 20, 
      @PageNumber = 1  


SELECT @FirstRow = (@PageNumber - 1) * @PageSize + 1, 
    @LastRow = (@PageNumber - 1) * @PageSize + @PageSize ; 

WITH Members AS 
( 
    SELECT Col1,Col2,Col3, 
      ROW_NUMBER() OVER (ORDER BY Col1 DESC) AS RowNumber 
       FROM Table 
) 
SELECT Col1,Col2,..,..,.., 
FROM Members 
WHERE RowNumber BETWEEN @FirstRow AND @LastRow 
ORDER BY Col1 ASC; 
+2

HTTP를 참조 잘 덮여 : // www.sqlteam.com/article/server-side-paging-using-sql-server-2005 – Sutirth