濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù)

SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù)

熱門標(biāo)簽:千呼電話機(jī)器人可以試用嗎 零成本地圖標(biāo)注賺錢 我要地圖標(biāo)注數(shù)量有限制嗎 400電話辦理泰安 電話機(jī)器人怎么代理商 安卡拉地圖標(biāo)注app 電銷需要外呼系統(tǒng)嗎 家庭農(nóng)場地圖標(biāo)注名稱怎樣起名 互聯(lián)網(wǎng)電話外呼系統(tǒng)

前言

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

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

存儲(chǔ)過程

CREATE proc [dbo].[usp_manyidu]
(
 @seatno nvarchar(30),
 @pageIndex int,
 @pageSize int,
 @rsCount int out
)
as
begin
 declare @sql nvarchar(max)  --拼接內(nèi)核SQL
 declare @where nvarchar(max)=' where 1=1' --查詢條件拼接字符串
 declare @cols nvarchar(max)  --查詢字段、計(jì)算字段
 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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • sqlserver存儲(chǔ)過程中SELECT 與 SET 對變量賦值的區(qū)別
  • SQL Server 2008 存儲(chǔ)過程示例
  • 如何在SQL Server 2008下輕松調(diào)試T-SQL語句和存儲(chǔ)過程
  • SqlServer獲取存儲(chǔ)過程返回值的實(shí)例
  • 一些SQL Server存儲(chǔ)過程參數(shù)及例子
  • sqlserver 存儲(chǔ)過程中If Else的用法實(shí)例
  • sqlserver中查找所有包含了某個(gè)文本的存儲(chǔ)過程
  • Sql Server中存儲(chǔ)過程中輸入和輸出參數(shù)(簡單實(shí)例 一看就懂)
  • sqlserver 各種判斷是否存在(表名、函數(shù)、存儲(chǔ)過程等)
  • SQL Server 分頁查詢存儲(chǔ)過程代碼

標(biāo)簽:文山 池州 黃山 來賓 東營 濱州 新鄉(xiāng) 大同

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù)》,本文關(guān)鍵詞  SQL,Server,存儲(chǔ),過程,同時(shí),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù)》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL Server存儲(chǔ)過程同時(shí)返回分頁結(jié)果集和總數(shù)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    长治市| 庆城县| 西昌市| 大英县| 苍梧县| 广宁县| 县级市| 赤城县| 娱乐| 耿马| 九江县| 铜山县| 尉犁县| 托克托县| 江油市| 扶沟县| 香格里拉县| 出国| 鄂伦春自治旗| 黔西| 二连浩特市| 永福县| 达尔| 明光市| 桃江县| 桂东县| 乾安县| 射阳县| 临颍县| 上高县| 朝阳市| 扶沟县| 嘉荫县| 西乌珠穆沁旗| 隆化县| 天全县| 桐庐县| 平阴县| 岳西县| 安徽省| 白山市|