图片 6

SqlServer简单数据分页

手头开辟的后端项目长期以来都用的.NET MVC框架,访谈数据库使用其自带的EF
CodeFirst方式,写存款和储蓄进程的力量都快退化了

闲来无事,本身写了条分页存款和储蓄进度,互连网相像的稿子多的是,这里只列了意气风发种情形,凭借深入分析函数生成行号来得以达成分页查询

 

环境:sqlServer 2014

开创数据库进度不再敖述,这里一直进去第黄金时代:

1、首先创制了一张TestAdmin表,主键为ID字段int类型且自增

1 create table TestAdmin (
2 Id int identity(1,1) primary Key,
3 Name varchar(Max),
4 Age int
5 )

2、接着批量导入1000条模拟数据

 1 declare @count int
 2 --这里定义模拟数据条数
 3 set @count=1000
 4 
 5 
 6 while(@count>0)
 7 begin
 8 insert into TestAdmin (Name,Age) values ('zhuyuan'+convert(varchar,@count),@count)
 9 set @count=@count-1
10 end

1 select * from TestAdmin

图片 1

导入完结,起头分页:

粗粗思路为第黄金时代按自然排序法规查询出全数数据,然后为每风华正茂行自动生成行号,然后再对转移行号后的表进行where语句筛选管理

3、大家先为主表每行插入一列肖似数量生成表V1,指标关键是为了前面包车型客车剖判函数能够对表进行单行聚合

1 select *,1 as SameRow from TestAdmin

图片 2

  • (表V1)

4、再对表V1进行调换行号管理,利用sqlServer自带解析函数ROW_NUMBE昂科雷()可达成该意义

1 select ROW_NUMBER() over(partition by SameRow order by Id) as Row,* from (select *,1 as SameRow from TestAdmin)m

生成表V2

图片 3

  • (表V2)

那会儿我们曾经有一张保有索引行号的表V2,后边的操作就一清二楚了

5、假如大家要求每页10条数据,且查询第二页

1 select * from (select ROW_NUMBER() over(partition by SameRow order by Id) as Row,* from (select *,1 as SameRow from TestAdmin)m)o where o.Row between 1*10+1 and 2*10

图片 4

6、再做三遍封装,为它创立一个仓库储存进度,便于大家随后再一次调用

1 create proc select_page
2 (
3 @pageIndex int,--当前页码
4 @pagecount int--每页条数
5 )
6 as
7 begin
8 select * from (select ROW_NUMBER() over(partition by SameRow order by Id) as Row,* from (select *,1 as SameRow from TestAdmin)m)o where o.Row between @pageIndex*@pagecount+1 and (@pageIndex+1)*@pagecount
9 end

图片 5

积攒进程成立成功!

7、大家来试一下,假设要查询第5页,每页10条

1 select_page 5,10

图片 6

 

末尾再对该表实行分页查询时就显明轻易多数^o^

                                                                       
                                                                       
                                                                       
                                               留个脚踏过的痕迹——二零一五.12.16
上午(阳光刚刚)