SqlServer数据库分页查询实战:使用存储过程和ROW_NUMBER()函数
创作时间:
作者:
@小白创作中心
SqlServer数据库分页查询实战:使用存储过程和ROW_NUMBER()函数
引用
1
来源
1.
https://www.xin3721.com/Articlesqldatabase/sql12373.html
在SqlServer数据库开发中,数据分页是一个常见的需求。本文将通过一个具体的实例,详细介绍如何使用存储过程和ROW_NUMBER()分析函数实现数据分页功能。
手边开发的后端项目一直以来都用的.NET MVC框架,访问数据库使用其自带的EF CodeFirst模式,写存储过程的能力都快退化了
闲来无事,自己写了条分页存储过程,网上类似的文章多的是,这里只列了一种情况,依据分析函数生成行号来实现分页查询
环境:sqlServer 2014
1. 创建测试表
首先创建一张TestAdmin表,主键为ID字段int类型且自增:
create table TestAdmin (
Id int identity(1,1) primary Key,
Name varchar(Max),
Age int
)
2. 导入模拟数据
接着批量导入1000条模拟数据:
declare @count int
--这里定义模拟数据条数
set @count=1000
while(@count>0)
begin
insert into TestAdmin (Name,Age) values ('zhuyuan'+convert(varchar,@count),@count)
set @count=@count-1
end
3. 生成行号
大致思路为首先按一定排序规则查询出所有数据,然后为每一行自动生成行号,然后再对生成行号后的表进行where语句筛选处理
我们先为主表每行插入一列相同数据生成表V1,目的主要是为了后面的分析函数可以对表进行单行聚合:
select *,1 as SameRow from TestAdmin
- (表V1)
再对表V1进行生成行号处理,利用sqlServer自带分析函数ROW_NUMBER()可实现该功能:
select ROW_NUMBER() over(partition by SameRow order by Id) as Row,* from (select *,1 as SameRow from TestAdmin)m
生成表V2:
- (表V2)
这时我们已经有一张具有索引行号的表V2,后面的操作就清晰了
4. 实现分页查询
假设我们需要每页10条数据,且查询第二页:
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
5. 封装存储过程
再做一次封装,为它创建一个存储过程,便于我们以后再次调用:
create proc select_page
(
@pageIndex int,--当前页码
@pagecount int--每页条数
)
as
begin
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
end
存储过程创建成功!
6. 调用存储过程
我们来试一下,假设要查询第5页,每页10条:
exec select_page 5, 10
后面再对该表进行分页查询时就明显轻松许多^o^
热门推荐
案件测谎仪:揭秘真相的有效工具
布洛芬胶囊里面含不含头孢
急性肠系膜淋巴结炎肚子疼怎么办缓解
下划线怎么打?在不同设备和软件中输入下划线的完整指南
古建筑之美——屋顶
为何自宋以后再无帝王泰山封禅?
上海硅酸盐所在锂离子电池用高首效硅碳负极方面取得新进展
谈“近”色变:近视
楚辞中大气的男孩名字(楚辞中大气的男孩名字龙年)
如何有效改进时间管理能力?揭示时间管理能力不足和改进的秘诀
原来你的高考试卷是这样评分的
“手绘战术地图”的启示:“土办法”成为制胜的“金点子”
山西王家大院和乔家大院哪个好
牙齿美白的方法哪种有效?是不是智商税?
退行性骨关节病:从病因到治疗的全面解析
白酒不宜代替料酒做菜
国庆开放! 在徐汇滨江搭乘直升机是种什么样的体验?
上海试点,出行通勤真的可以坐直升机了,价格公布
前端如何显示图结构
构建高效安全管理体系的关键要素
女生必须知道的护肤常识
如何选择适合自己的防火门?
快消品经销商仓库分区规划指南:从核心原则到优化策略
被追尾对方全责逃逸应该如何处理
出勤率限制下,赛季奖项的遗珠们
怎么做俯卧撑最有效
颜色是如何出现的,为什么有这么多不同的色调?
自媒体用户如何选择支持多种格式的NAS
干细胞治疗2型糖尿病:最新研究揭示治疗前景和成功案例
SketchUp导入3D模型出现乱线怎么办?7个实用解决方案