简书链接:sqlserver翻页查询
文章字数:151,阅读全文大约需要1分钟

1
2
3
4
5
6
7
DECLARE @pageNumber INT = -- 前端传来的页码 从1开始
DECLARE @pageSize INT = -- 前端传来的每页大小
SELECT *
FROM Students
ORDER BY BirthDate
OFFSET (@pageNumber - 1) * @pageSize ROWS
FETCH NEXT @pageSize ROWS ONLY;

注意 ,不能再和top共用了。

1
2
OFFSET (@pageNumber - 1) * @pageSize ROWS
FETCH NEXT @pageSize ROWS ONLY;

这句话固定插入到尾部

需要2012以及以后版本支持

另外的实现方式 ,这种方式个人感觉侵入性太大,那些语句都要调整。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE @pageNumber INT = -- 这里接收前端传来的页码
DECLARE @pageSize INT = -- 这里接收前端传来的每页大小

-- 使用ROW_NUMBER()函数创建临时序列
WITH Paging AS (
SELECT
ROW_NUMBER() OVER (ORDER BY BirthDate) AS RowNum,
s.*
FROM
Students s
)
-- 根据页码和每页大小选取指定范围内的记录
SELECT *
FROM Paging
WHERE RowNum BETWEEN (@pageNumber - 1) * @pageSize + 1 AND @pageNumber * @pageSize;