SQL Server存储过程同时返回分页结果集和总数

栏目: 数据库 · SQL Server · 发布时间: 7年前

内容简介:这篇文章主要为大家详细介绍了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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机网络(第6版)

计算机网络(第6版)

[美] James F.Kurose、[美] Keith W.Ross / 陈鸣 / 机械工业出版社 / 2014-10 / 79.00元

《计算机网络:自顶向下方法(原书第6版)》第1版于12年前出版,首创采用自顶向下的方法讲解计算机网络的原理和协议,出版以来已被几百所大学和学院选用,是业界最经典的计算机网络教材之一。 《计算机网络:自顶向下方法(原书第6版)》第6版继续保持了以前版本的特色,为计算机网络教学提供了一种新颖和与时俱进的方法,同时也进行了相当多的修订和更新:第1章更多地关注时下,更新了接入网的论述;第2章用pyt......一起来看看 《计算机网络(第6版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具