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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- sqlserver数据库实时同步(SQL Server实时同步更新远程数据库遇到的问题小结)
- php连接mysql需要数据源吗(php连接mysql数据库最简单的实现方法)
- mysql修改初始密码教程(使用MySQL命令行修改密码)
- mysql时间戳和datetime对比(MySQL时间设置注意事项的深入总结)
- mysql数据类型和使用方法(MySQL数据类型全解析)
- 怎么把csv文件导入mysql(mysql导入csv的4种报错的解决方法)
- mysql慢日志设置多少合适(MySQL慢查询日志的作用和开启)
- SQL replace的使用方法
- sqlservercount函数的用法(SQL Server中row_number函数的常见用法示例详解)
- mysql给字段加默认值(MySQL 如何处理隐式默认值)
- SQL SERVER存储过程中使用事务与try catch
- mysql水平拓展的瓶颈(MySQL令人大跌眼镜的隐式转换)
- sql根据条件查出两条一样的数据(SQL中遇到多条相同内容只取一条的最简单实现方法)
- mysql乐观锁一定比悲观锁性能高(mysql居然还能实现分布式锁的方法)
- centos7.5安装mysql教程(CentOS8下MySQL 8.0安装部署的方法)
- mysql数据库简单操作(一篇文章教会你进行MySQL数据库和数据表的基本操作)
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
热门推荐
- python画图教程(详解用Python练习画个美队盾牌)
- plsql提示developer(PL/SQL Developer过期的两种解决方法)
- 怎么用php开发验证码(PHP简单验证码功能机制实例详解)
- aspx文件中CodeFile与CodeBehind的区别
- python怎么自动生成报告(python根据文章标题内容自动生成摘要的实例)
- yield方法可以使一个线程停止运行(Yii2.0框架模型添加/修改/删除数据操作示例)
- dataset用法
- vue组件详解(Vue的方法和属性案例详解)
- sqlserver备份还原数据(通过Windows批处理命令执行SQL Server数据库备份)
- sql解析器配置(sql字段解析器的实现示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9