SQLServer数据分页
一.分页
将一定量的数据进行分页,每一页中定量存储数据
1.top分页查询
比如当前存在于数据库中的一共有40条数据,我们将每10条数据算作一页,那么一共可以分出4页,如果要进行查询的话,只需要使用如下格式即可:
--查询第一页
select top 5 * from Student
--查询第二页
select top 5 * from Student
where Id not in(1,2,3,4,5,6,7,8,9,10)
注意点:虽然我们一般所使用的Id自增长形式为identity(1,1),即从1开始,每次增长1,但是在我们查询分页时还是要注意Id的自增长形式,避免出错
而从上方的示例中不知道你们有没有发现一个规律,写出来是这样的:
select top 页码 * from 表名
where Id not in(select top 页码*(当前页-1) Id from 表名)
所以正确的分页查询格式应该为:
select top 5 * from Student
where Id not in(select top 0 Id from Student)
select top 5 * from Student
where Id not in(select top 5 Id from Student)
select top 5 * from Student
where Id not in(select top 10 Id from Student)
若是运用了变量,那么就更容易理解了
declare @Size int = 5
declare @Page int = 1
select top (@Size) * from Student
where Id not in(select top (@Size * (@Page - 1)) Id from Student)
只需要修改Page变量(页数),就可以查询到该页的数据了
2.row_number分页查询
格式为:
select * from
(select row_number() over(order by Id) RowId,* from Student)
where Id between (当前页号-1) * 每页大小 + 1 and 当前页号 * 每页大小
同样使用到变量进行举例:
declare @Size int = 5
declare @Page int = 1
select * from
(select row_number() over(order by Id) RowId,* from Student)
where Id between (@Page-1) * @Size + 1 and @Page * @Size