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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- SQL Server多列索引
- SQLSERVER 拼接含有变量字符串案例详解(SQLSERVER 拼接含有变量字符串案例详解)
- MySQL自定义函数
- mysql是自动commit吗(详解MySQL与Spring的自动提交autocommit)
- mysql未使用索引的查询(如何在mysql进行查询缓存及失败的解决方法)
- linux系统登录mysql数据库(Linux手动部署远程的mysql数据库的方法详解)
- Sql Server常用系统存储过程
- 安装SQL Server 2016出错提示:需要安装oracle JRE7 更新 51(64位)或更高版本问题的解(安装SQL Server 2016出错提示:需要安装oracle JRE7 更新 5164位或更高版本问题的解)
- sql启动错误代码1814(SQLMSSQLSERVER服务启动错误代码3414的解决方法)
- 设置mysql字符集语句(MySQL修改字符集的实战教程)
- mysql日常运维(MySQL从库维护经验分享)
- mysql有哪些索引和聚簇索引(MySQL 独立索引和联合索引的选择)
- sql server convert 函数(sql server通过pivot对数据进行行列转换的方法)
- SQL中Exists的用法
- sqlserver拒绝访问怎么办(SQL server服务显示远程过程调用失败的解决方法)
- 软件测试常用mysql语句(MySQL压力测试工具Mysqlslap的使用)
- 越南没事(越南没事情做)
- 重庆旅游攻略(重庆旅游3-4天攻略最佳线路)
- 周杰伦演唱会门票(周杰伦演唱会门票多少钱一张2023)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
热门推荐
- 如何筛选求职招聘广告
- h1标签的作用
- python strip用法(Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析)
- python操作pandas(详解Python学习之安装pandas)
- sql语句无效数字(SQL中写入包含有英文单引号“ '' ”失败问题深入详解)
- js数字时钟编程(JavaScript实现动态数字时钟)
- sql重复记录怎么删除(SQL去除重复记录七种)
- linuxdocker命令使用教程(seata docker 高可用部署的详细介绍)
- sql语句groupby分组后怎么显示(SQL group by去重复且按照其他字段排序的操作)
- dedecms文章内容页调用自定义字段(DEDECMS教程:上/下一篇文章标题长度的截取方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9