1.sqlserver2012之前的版本(row_number() over())
在 SQL Server 中,你可以使用 ROW_NUMBER()
函数来进行分页查询。以下是一个示例:
WITH OrderedResults AS
(SELECT column1, column2, ...,ROW_NUMBER() OVER (ORDER BY column1) AS RowNumFROM your_table
)
SELECT column1, column2, ...
FROM OrderedResults
WHERE RowNum BETWEEN 11 AND 20;
在这个示例中,ROW_NUMBER() OVER (ORDER BY column1)
会给结果集中的每一行分配一个编号。然后我们把这个结果作为子查询 OrderedResults
,并在外部查询中使用 WHERE
子句来选择指定页码的数据。
如果你想要获取第 x 页的数据,你可以使用类似的计算公式:
DECLARE @PageSize INT = 10;
DECLARE @PageNumber INT = 2;WITH OrderedResults AS
(SELECT column1, column2, ...,ROW_NUMBER() OVER (ORDER BY column1) AS RowNumFROM your_table
)
SELECT column1, column2, ...
FROM OrderedResults
WHERE RowNum BETWEEN (@PageNumber - 1) * @PageSize + 1 AND @PageNumber * @PageSize;
在这个示例中,我们根据页码和每页的数据行数来动态计算要返回的数据范围。通过修改 @PageSize
和 @PageNumber
的值,你可以获取任意页的数据。
2.sqlserver2012后的版本(offset 跳过多少条 rows fetch next rows 取多少条 only)
在 SQL Server 中,可以使用 OFFSET
和 FETCH
子句来实现分页查询。以下是一个简单的示例:
SELECT column1, column2, ...
FROM your_table
ORDER BY column1
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
在这个示例中,OFFSET 10 ROWS
表示跳过前面的 10 行数据,FETCH NEXT 10 ROWS ONLY
表示获取接下来的 10 行数据。这个查询将返回第 11 到第 20 行的数据。
如果你想要获取第 x 页的数据,可以使用类似的计算公式:
DECLARE @PageSize INT = 10;
DECLARE @PageNumber INT = 2;SELECT column1, column2, ...
FROM your_table
ORDER BY column1
OFFSET (@PageNumber - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY;
在这个示例中,@PageSize
定义了每页的数据行数,@PageNumber
定义了要获取的页数。通过修改这两个变量,你可以获取任意页的数据。