多语言展示
当前在线:1300今日阅读:175今日分享:29

Sql 数据库分页

前台缓存分页,如果数据很多的话会变得很慢,而且不方便,所以就在这里把数据库的分页进行集合。
工具/原料

sqlserver2008

分页第一种
1

首先 建一张测试表create database Testgouse Testgocreate Table UserInfo(    userid int identity(1,1) primary key,    username nvarchar(10) not null)

2

接着往数据库里添加测试数据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

3

--查询第三页的数据--数据库模拟前台传过来的参数declare @pagesize int--定义显示条数declare @currentPage int--定义当前页set @pagesize = 3set @currentPage = 3--分页查询语句select top (@pagesize) * from Userinfo where userid not in(select top (@pagesize*(@currentPage-1)) userid from UserInfo)

4

--第一页:因为不需要对数据过滤,--所以只取PagSize数量的记录--第二页:步骤:--1.取前两页的数据 selct top @pagesize *@currentPage--2.过滤掉第一页的数据@pagesize*(@currentPage-1)

分页第二种
1

--第二种方法:如果ID是连续,完全不用top--直接用id就可以--建表格  数据从UserInfo拿过来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

2

分页--查询第二页的数据--数据库模拟前台传过来的参数declare @pagesize int--定义显示条数declare @currentPage int--定义当前页set @pagesize = 3set @currentPage = 2--查询语句select * from #tempUserInfowhere id between (@currentPage -1)*@pagesize +1 and @pagesize * @currentPage

分页第三种
1

--第三种--rownumber()函数是sql server2005才有declare @pagesize intdeclare @currentPage intset @pagesize = 3set @currentPage = 3--查询语句select * from (select ROW_NUMBER() over (order by userid) as HangHao,* from UserInfo) pageduserinfowhere HangHao between (@currentPage -1)*@pagesize +1 and @pagesize * @currentPage

2

--效率问题:第一张绝对比第三种低。--理论上第二种效率最高,但不推荐用,--要实现的话,一般是用存储过程个人推荐第三种

推荐信息