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与Oracle数据类型对应关系
- 2021-10-04 01:06:07
- mysql8.0.20安装教程图解(mysql 8.0.24 安装配置方法图文教程)
- mysql的连接代码(MySQL 连接查询的原理和应用)
- sql数据库安装概要(详解将DataGrip连接到MS SQL Server的方法)
- sql server 字符串处理(SQL Server中利用正则表达式替换字符串的方法)
- sql建立视图步骤(SQL 创建、更新和删除视图的方法)
- sqlserver如何生成xml文件(实现SQL Server 原生数据从XML生成JSON数据的实例代码)
- mysql如何检查索引失效(mysql索引失效的几种情况分析)
- sql server设置自增(sql server建表时设置ID字段自增的简单方法)
- sqlserver中复合索引(浅析SQL Server 聚焦索引对非聚集索引的影响)
- mpp数据库的客户端工具(xampp默认mysql数据库root密码的修改)
- mybatis动态sql框架(Mybatis4 之Mybatis动态sql的实现代码)
- sqlserver表值函数用法(SQL Server数据库中的表名称、字段比较)
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- sqlserver查询表结构(sql server递归子节点、父节点sql查询表结构的实例)
- 杯酒人生---瓦伦丁酒杯和奥丁格啤酒(杯酒人生---瓦伦丁酒杯和奥丁格啤酒)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
- CellPress旗下的6 期刊,国人友刊来了解一下吧(CellPress旗下的6期刊国人友刊来了解一下吧)
- ()
- SCI检索 SSCI检索 EI检索 ISTP检索 CSCD检索简介(SCI检索SSCI检索EI检索)
- 参考文献里期刊名称的写法,你知道吗(参考文献里期刊名称的写法)
热门推荐
- MVC中JS获取后台的数据
- css3渐变放大功能(CSS3 渐变Gradients之CSS3 线性渐变)
- laravel模型个数(laravel withCount 统计关联数量的方法)
- docker-compose项目部署(使用Docker Compose部快速署ELK亲测有效)
- dedecms系统设置参数(织梦DEDECMS V6安装后报错打不开的处理方法)
- 织梦标签怎么设置网站(织梦模板DEDECMS文章页实现让用户选择字体大小的代码的方法)
- treeview绑定xml
- sqlserverdatetime时区(解析SQL Server中datetimeset转换datetime类型问题)
- react新手指引页面编写(React+TypeScript进行项目构建案例讲解)
- 百度智能云防火墙(百度云服务器BCC安装宝塔面板图文教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9