如何在SQL Server 2008中进行分页

Omu*_*Omu 51 sql pagination sql-server-2008

你如何在SQL Server 2008中进行分页?

Adr*_*der 44

你可以尝试类似的东西

DECLARE @Table TABLE(
        Val VARCHAR(50)
)

DECLARE @PageSize INT,
        @Page INT

SELECT  @PageSize = 10,
        @Page = 2

;WITH PageNumbers AS(
        SELECT Val,
                ROW_NUMBER() OVER(ORDER BY Val) ID
        FROM    @Table
)
SELECT  *
FROM    PageNumbers
WHERE   ID  BETWEEN ((@Page - 1) * @PageSize + 1)
        AND (@Page * @PageSize)
Run Code Online (Sandbox Code Playgroud)

  • @zeitgeist,它正在使用称为 PageNumbers 的 CTE。您是否按原样测试了代码? (2认同)

Ada*_*Dev 41

您可以使用ROW_NUMBER():

返回结果集分区中行的序号,从1开始,每个分区的第一行.

例:

WITH CTEResults AS
(
    SELECT IDColumn, SomeField, DateField, ROW_NUMBER() OVER (ORDER BY DateField) AS RowNum
    FROM MyTable
)

SELECT * 
FROM CTEResults
WHERE RowNum BETWEEN 10 AND 20;
Run Code Online (Sandbox Code Playgroud)


小智 14

SQL Server 2012提供分页功能(参见http://www.codeproject.com/Articles/442503/New-features-for-database-developers-in-SQL-Server)

在SQL2008中,您可以这样做:

declare @rowsPerPage as bigint; 
declare @pageNum as bigint; 
set @rowsPerPage=25; 
set @pageNum=10;   

With SQLPaging As   ( 
    Select Top(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY ID asc) 
    as resultNum, * 
    FROM Employee )
select * from SQLPaging with (nolock) where resultNum > ((@pageNum - 1) * @rowsPerPage)
Run Code Online (Sandbox Code Playgroud)

Prooven!它的工作和规模始终如一.