前言

好长时间没摸数据库了,周末在家写了个报表的存储过程,一时间对使用存储过程实现分页的同时并计算出记录总数不知道怎么更好的去实现。按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端。
我对于这样一个业务存储过程总结如下: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 分页查询存储过程代码
# 分页
# 放在
# 这部
# 这样一个
# 写了
# 还需要
# 我们现在
# 拿出来
# 不知道怎么
# 大家多多
# 计算出
# 好长
# 客户端
# 周末
# 必须要
相关文章:
如何快速搭建高效WAP手机网站?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
盐城做公司网站,江苏电子版退休证办理流程?
Java解压缩zip - 解压缩多个文件或文件夹实例
一键网站制作软件,义乌购一件代发流程?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何配置IIS站点权限与局域网访问?
如何在IIS中新建站点并解决端口绑定冲突?
招商网站制作流程,网站招商广告语?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站主机SSH密钥生成步骤及常见问题解答?
如何确保FTP站点访问权限与数据传输安全?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
C++如何使用std::optional?(处理可选值)
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
c# 在ASP.NET Core中管理和取消后台任务
建站之星上传入口如何快速找到?
七夕网站制作视频,七夕大促活动怎么报名?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
如何通过主机屋免费建站教程十分钟搭建网站?
制作网站的模板软件,网站怎么建设?
黑客入侵网站服务器的常见手法有哪些?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何通过IIS搭建网站并配置访问权限?
Swift开发中switch语句值绑定模式
如何通过西部数码建站助手快速创建专业网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
建站主机是否属于云主机类型?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
零基础网站服务器架设实战:轻量应用与域名解析配置指南
电脑免费海报制作网站推荐,招聘海报哪个网站多?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
实例解析Array和String方法
深入理解Android中的xmlns:tools属性
营销式网站制作方案,销售哪个网站招聘效果最好?
英语简历制作免费网站推荐,如何将简历翻译成英文?
红河网站制作公司,红河事业单位身份证如何上传?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
如何在局域网内绑定自建网站域名?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站主机系统SEO优化与智能配置核心关键词操作指南
如何选择建站程序?包含哪些必备功能与类型?
建站之星安装模板失败:服务器环境不兼容?
*请认真填写需求信息,我们会在24小时内与您取得联系。