SQL Server存储过程同时返回分页结果集和总数
发布时间 - 2026-01-10 22:33:45 点击率:次前言

好长时间没摸数据库了,周末在家写了个报表的存储过程,一时间对使用存储过程实现分页的同时并计算出记录总数不知道怎么更好的去实现。按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。
我对于这样一个业务存储过程总结如下:1、内核层,通常也就是要查询的字段或者要计算的字段,这部分单独拿出来。 2、查询条件层。 如果内核只是查询一些字段的话,条件可以放在查询条件层拼接。 如果内核层完全是统计业务逻辑,那么查询条件则必须要放在内核层,像我们常用的SUM、GROUPBY 业务。 3、添加分页参数(也就是我们现在多数用的ROW_NUMBER添加rn参数)。 存储过程里我们一般会单独声明每个部分的变量用于执行时拼接。
存储过程
CREATE proc [dbo].[usp_manyidu]
(
@seatno nvarchar(30),
@pageIndex int,
@pageSize int,
@rsCount int out
)
as
begin
declare @sql nvarchar(max) --拼接内核SQL
declare @where nvarchar(max)=' where 1=1' --查询条件拼接字符串
declare @cols nvarchar(max) --查询字段、计算字段
declare @sort nvarchar(50) --排序
set @sql=' from dbo.log where seatno is not null and seatno<>'''' group by seatno '
set @cols='seatno,SUM(case when manyidu=0 then 1 else 0 end) as manyi,
SUM(case when manyidu=1 then 1 else 0 end) as yiban,
SUM(case when manyidu=2 then 1 else 0 end) as bumanyi,
SUM(case when manyidu IS null or manyidu='''' then 1 else 0 end) as weipingjia'
set @sort='order by seatno'
if(@seatno <>'')
set @where+=' and seatno='+@seatno
declare @strSQL nvarchar(max)
set @strSQL=N'select * from (select ROW_NUMBER() over('+@sort+') as tmpid,* from( select * from (select '+@cols+@sql+') as tmpTable1'+@where+') as tmpTable2) as tmpTable3'
+' where tmpid between '+STR((@pageIndex-1)*@pageSize+1)+' and '+STR(@pageIndex*@pageSize)
print @strSQL
exec(@strSQL)
set @strSQL='select @total=count(*) from (select '+@cols+@sql+') as tmpTable'+@where
print @strSQL
exec sp_executesql @strSQL,N'@total int out',@total=@rsCount out
end
GO
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# SQL
# Server
# 存储过程
# sqlserver存储过程中SELECT 与 SET 对变量赋值的区别
# SQL Server 2008 存储过程示例
# 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
# SqlServer获取存储过程返回值的实例
# 一些SQL Server存储过程参数及例子
# sqlserver 存储过程中If Else的用法实例
# sqlserver中查找所有包含了某个文本的存储过程
# Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
# sqlserver 各种判断是否存在(表名、函数、存储过程等)
# SQL Server 分页查询存储过程代码
# 分页
# 放在
# 这部
# 这样一个
# 写了
# 还需要
# 我们现在
# 拿出来
# 不知道怎么
# 大家多多
# 计算出
# 好长
# 客户端
# 周末
# 必须要
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
北京专业网站制作设计师招聘,北京白云观官方网站?
如何为不同团队 ID 动态生成多个独立按钮
如何快速搭建高效可靠的建站解决方案?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel如何处理表单验证?(Requests代码示例)
EditPlus中的正则表达式实战(5)
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
JS去除重复并统计数量的实现方法
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
网站制作大概多少钱一个,做一个平台网站大概多少钱?
油猴 教程,油猴搜脚本为什么会网页无法显示?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
利用python获取某年中每个月的第一天和最后一天
如何快速打造个性化非模板自助建站?
QQ浏览器网页版登录入口 个人中心在线进入
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
如何快速选择适合个人网站的云服务器配置?
php 三元运算符实例详细介绍
如何用VPS主机快速搭建个人网站?
如何在阿里云完成域名注册与建站?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
成都网站制作公司哪家好,四川省职工服务网是做什么用?
详解Android——蓝牙技术 带你实现终端间数据传输
详解vue.js组件化开发实践
公司网站制作需要多少钱,找人做公司网站需要多少钱?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
高端建站如何打造兼具美学与转化的品牌官网?
香港网站服务器数量如何影响SEO优化效果?
如何在阿里云通过域名搭建网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何撰写建站申请书?关键要点有哪些?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
JavaScript如何实现路由_前端路由原理是什么
如何在万网主机上快速搭建网站?
微信小程序 HTTPS报错整理常见问题及解决方案
js实现点击每个li节点,都弹出其文本值及修改
C#如何调用原生C++ COM对象详解
如何在阿里云域名上完成建站全流程?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
在线制作视频的网站有哪些,电脑如何制作视频短片?
C++用Dijkstra(迪杰斯特拉)算法求最短路径

