国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server存儲過程同時返回分頁結果集和總數

2024-08-31 01:04:35
字體:
來源:轉載
供稿:網友

前言

      好長時間沒摸數據庫了,周末在家寫了個報表的存儲過程,一時間對使用存儲過程實現分頁的同時并計算出記錄總數不知道怎么更好的去實現。按照我們正常的業務邏輯,存儲過程數據首先是分頁,其次接受若干查詢條件,返回分頁結果集的同時還需要返回記錄總數給客戶端。

      我對于這樣一個業務存儲過程總結如下:1、內核層,通常也就是要查詢的字段或者要計算的字段,這部分單獨拿出來。  2、查詢條件層。 如果內核只是查詢一些字段的話,條件可以放在查詢條件層拼接。 如果內核層完全是統計業務邏輯,那么查詢條件則必須要放在內核層,像我們常用的SUM、GROUPBY 業務。 3、添加分頁參數(也就是我們現在多數用的ROW_NUMBER添加rn參數)。   存儲過程里我們一般會單獨聲明每個部分的變量用于執行時拼接。

存儲過程

CREATE proc [dbo].[usp_manyidu]( @seatno nvarchar(30), @pageIndex int, @pageSize int, @rsCount int out)asbegin 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     endGO

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


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛宁县| 锦屏县| 龙海市| 鲜城| 海兴县| 巴彦淖尔市| 灵川县| 德庆县| 垣曲县| 静宁县| 芜湖县| 安阳县| 揭阳市| 荔波县| 垫江县| 沙坪坝区| 蓬溪县| 保康县| 芜湖县| 长白| 科技| 毕节市| 泰安市| 读书| 宁阳县| 会理县| 平顺县| 孟州市| 新郑市| 布拖县| 重庆市| 安化县| 青海省| SHOW| 习水县| 张家港市| 阳江市| 苏尼特右旗| 鸡西市| 阜南县| 昭苏县|