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)
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!它的工作和规模始终如一.