sqlserver存储过程同步数据(SQL Server存储过程同时返回分页结果集和总数)
类别:数据库 浏览量:1174
时间:2022-01-21 00:08:47 sqlserver存储过程同步数据
SQL Server存储过程同时返回分页结果集和总数前言
好长时间没摸数据库了,周末在家写了个报表的存储过程,一时间对使用存储过程实现分页的同时并计算出记录总数不知道怎么更好的去实现。按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。
我对于这样一个业务存储过程总结如下: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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- mysql完整整理(Mysql隔离性之Read View的用法说明)
- mysql清空数据库所有表格(MySQL用truncate命令快速清空一个数据库中的所有表)
- mysql错误代码之1064的解决方案(mysql错误代码之1064的解决方案)
- 了解mysql数据自动备份(MySQL数据备份方法的选择与思考)
- 查看mysql索引缓存(MySQL查询缓存的小知识)
- 怎么查看mysql计划执行情况(详解 MySQL 执行计划)
- django操作默认数据库(Django数据库类库MySQLdb使用详解)
- mysqlpxc性能(MySQL之PXC集群搭建的方法步骤)
- sql server2008无法连接怎么办(SQL Server 2008 R2登录失败的解决方法)
- laravel mysql 操作方式(Laravel使用原生sql语句并调用的方法)
- 数据库having的用法(数据库SQL中having和where的用法区别)
- mysql查询killed状态的进程(MySQL kill指令使用指南)
- sql server还原数据库时提示数据库正在使用
- sql中去除重复记录的关键字(sqlserver查询去掉重复数据的实现)
- sqlserver查看数据表更新时间(SQL Server实现显示每个类别最新更新数据的方法)
- mysql写入效率越来越差(MYSQL大量写入问题优化详解)
- 会 吃人 的客机 从天堂到地狱只需5分钟,图-104如何做到(会吃人的客机)
- 男人犯的错,为什么要女人来承担(为什么要女人来承担)
- 心理学 四个金蟾,哪个最招财 测你今生的运势有多棒(心理学四个金蟾)
- 吉善缘《聚宝金蟾》金蟾招财摆件 三足全铜蟾蜍客厅店铺开业礼品(吉善缘聚宝金蟾金蟾招财摆件)
- 招财化煞神兽,金蟾变了(招财化煞神兽金蟾变了)
- 26岁杨紫的白素贞遇上24岁鞠婧祎,哪个最美(26岁杨紫的白素贞遇上24岁鞠婧祎)
热门推荐
- 如何用xampp新建数据库(Windows系统下XAMPP的安装配置图文教程)
- tomcat部署web项目常见问题(关于tomcat部署应用无法访问前端页面的问题)
- 原生js实现轮播图代码(js实现轮播图制作方法)
- js竖屏切换程序(js判断移动端横竖屏视口检测实现的几种方法)
- python3yield使用教程(python中yield的用法详解——最简单,最清晰的解释)
- 移动web跨端开发领域(Web移动端布局那些事)
- dedecms入门教程(DedeCms autoindex和itemindex使用介绍)
- laravel框架网站搭建教程(Laravel框架实现文件上传的方法分析)
- mysql的索引及其介绍总结(浅析MysQL B-Tree 索引)
- python本地ocr库(详解Python安装tesserocr遇到的各种问题及解决办法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9