• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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存储过程中SELECT 与 SET 对变量赋值的区别
    • SQL Server 2008 存储过程示例
    • 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
    • SqlServer获取存储过程返回值的实例
    • 一些SQL Server存储过程参数及例子
    • sqlserver 存储过程中If Else的用法实例
    • sqlserver中查找所有包含了某个文本的存储过程
    • Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
    • sqlserver 各种判断是否存在(表名、函数、存储过程等)
    • SQL Server 分页查询存储过程代码
    上一篇:系统隐形杀手——阻塞与等待(SQL)
    下一篇:SQL2008 详解直接将XML存入到SQL中
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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