Sql 分页三种方式
时间:2021-07-01 10:21:17
帮助过:1人阅读
database Test
go
use Test
go
create Table UserInfo(
userid int identity(
1,
1)
primary key,
username nvarchar(
10)
not null
)
insert into UserInfo
values (
‘a11‘)
insert into UserInfo
values (
‘a12‘)
insert into UserInfo
values (
‘a13‘)
insert into UserInfo
values (
‘a14‘)
insert into UserInfo
values (
‘a15‘)
insert into UserInfo
values (
‘a16‘)
insert into UserInfo
values (
‘a17‘)
select * from UserInfo
declare @pagesize int
declare @currentPage int
set @pagesize = 3
set @currentPage = 3
select top (
@pagesize)
* from Userinfo
where userid
not in(
select top
(@pagesize*(
@currentPage-1))
userid
from UserInfo)
--第一页:因为不需要对数据过滤,
--所以只取PagSize数量的记录
--第二页:步骤:
--1.取前两页的数据 selct top @pagesize *@currentPage
--2.过滤掉第一页的数据
--第二种方法:如果ID是连续,完全不用top
--直接用id就可以
create table #tempUserInfo
(
id int identity(
1,
1)
primary key,
userid int not null,
username nvarchar(
10)
not null
)
insert into #tempUserInfo
select * from UserInfo
declare @pagesize int
declare @currentPage int
set @pagesize = 3
set @currentPage = 2
select * from #tempUserInfo
where id
between
(@currentPage -1)
*@pagesize +1
and @pagesize * @currentPage
--第三种
--rownumber()函数是sql server2005才有
declare @pagesize int
declare @currentPage int
set @pagesize = 3
set @currentPage = 3
select * from (
select ROW_NUMBER()
over (
order by userid)
as HangHao,
*
from UserInfo) pageduserinfo
where HangHao
between
(@currentPage -1)
*@pagesize +1
and @pagesize * @currentPage
--效率问题:第一张绝对比第三种低。
--理论上第二种效率最高,但不推荐用,
--要实现的话,一般是用存储过程
--个人推荐:用第三种方式
--SqlServer:ROwNumber
--MySql:limit
--Oracle :序列:Sequence
View Code
Sql 分页三种方式
标签: