程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server存儲進程同時前往分頁後果集和總數

SQL Server存儲進程同時前往分頁後果集和總數

編輯:MSSQL

SQL Server存儲進程同時前往分頁後果集和總數。本站提示廣大學習愛好者:(SQL Server存儲進程同時前往分頁後果集和總數)文章只能為提供參考,不一定能成為您想要的結果。以下是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

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved