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

首頁 > 開發(fā) > 綜合 > 正文

百萬級分頁存儲過程該進版

2024-07-21 02:48:31
字體:
供稿:網(wǎng)友
百萬級分頁存儲過程該進版

--經(jīng)過一段時間的使用,這個存儲過程發(fā)現(xiàn)了一些不完美的地方,主要體現(xiàn)在排序的問題上面,一般排序都應該是把最新的顯示在前面的,修改前的只能指定一個字段進行排序,而且還需要指定是按降序還是升序來排,而且使用的時候排序只在當前也排序,而不是針對所有記錄來排序,現(xiàn)修改后版本如下:可以指定多個字段排序,并且是針對所有滿足條件的記錄進行排序。

SET ANSI_NULLS ONGO

SET QUOTED_IDENTIFIER ONGO

-- Batch submitted through debugger: SQLQuery8.sql|0|0|C:/Users/Administrator/AppData/Local/Temp/~vsBEFB.sql/****** Object: StoredPRocedure [dbo].[Proc_PageData] Script Date: 03/12/2012 16:38:59 ******/

CREATE PROCEDURE [dbo].[Proc_PageData](@tblName nvarchar(200), ----要顯示的表或多個表的連接@fldName nvarchar(2000) = '*', ----要顯示的字段列表@pageSize int = 100, ----每頁顯示的記錄個數(shù)@page int = 1, ----要顯示那一頁的記錄@pageCount int = 1 output, ----查詢結(jié)果分頁后的總頁數(shù)@Counts int = 1 output, ----查詢到的記錄數(shù)@ID nvarchar(50), ----主表的主鍵@fldSort nvarchar(1000) ='', ----排序字段列表或條件@Sort bit = 0, ----排序方法,0為升序,1為降序@strCondition nvarchar(2000) ='' ----查詢條件,不需where)ASSET NOCOUNT ONDeclare @sqlTmp nvarchar(1000) ----存放動態(tài)生成的SQL語句Declare @strTmp nvarchar(1000) ----存放取得查詢結(jié)果總數(shù)的查詢語句Declare @strID nvarchar(1000) ----存放取得查詢開頭或結(jié)尾ID的查詢語句Declare @sqlSort nvarchar(200) ----存放臨時生成的排序條件Declare @intCounts int ----要移動的記錄數(shù)Declare @BeginID int ----開始的IDDeclare @EndID int ----結(jié)束的IDdeclare @tempID intdeclare @topstr nvarchar(1000)declare @conditionStr nvarchar(1000)--------首先生成排序方法-----------if @Sort=0 --升序--beginif @fldSort <>''set @sqlSort = ' Order by ' + @fldSort elseset @sqlSort = ' Order by ' + @ID +' DESC'--end--else --降序--begin--if @fldSort='' -- set @sqlSort = ' Order by ' + @ID + ' DESC '--else -- set @sqlSort = ' Order by ' + @fldSort --end--------生成查詢語句----------此處@strTmp為取得查詢結(jié)果數(shù)量的語句if @strCondition='' --沒有設置顯示條件beginset @sqlTmp = @fldName + ' From ' + @tblNameset @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblNameset @strID = ' From ' + @tblName+ ' '+@sqlSortendelsebeginset @sqlTmp = + @fldName + 'From ' + @tblName set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName + ' where ' + @strConditionset @strID = ' From ' + @tblName + ' where ' + @strCondition + ' '+@sqlSortend--print @strID----取得查詢結(jié)果總數(shù)量-----exec sp_executesql @strTmp,N'@Counts int out ',@Counts out--取得分頁總數(shù)if @Counts <= @pageSizeset @pageCount = 1elsebeginif @Counts%@PageSize=0 set @pageCount = (@Counts / @pageSize) elseset @pageCount = (@Counts / @pageSize) + 1endset @topstr=' top '+Convert(nvarchar,@pageSize)--計算要移動的記錄數(shù)if @page = 1 --加快處理begin-----取得分頁后此頁的第一條記錄的IDset @conditionStr=''end elsebegin-----取得分頁后此頁的第一條記錄的IDif @pageCount>1begindeclare @topnum intset @topnum=(@page-1)*@PageSizeset @conditionStr=' '+@ID+' not in(select top '+ Convert(nvarchar,@topnum)+' '+@ID+' from '+@tblName+@sqlSort+')'endelseset @conditionStr=''end --print @strIDif @BeginID>@EndIDbegin set @tempID=@BeginID set @BeginID=@EndID set @EndID=@tempIDend------恢復系統(tǒng)設置-----set rowcount 0SET NOCOUNT ON------返回查詢結(jié)果-----if @strCondition=''begin if @conditionStr='' set @strTmp = 'select ' + @topstr + ' ' + @sqlTmp else set @strTmp = 'select ' + @topstr + ' ' + @sqlTmp + ' where ' + @conditionStrendelsebeginif @conditionStr=''set @strTmp = 'select ' + @topstr + ' ' + @sqlTmp + ' where ' + @strConditionelseset @strTmp = 'select ' + @topstr + ' ' + @sqlTmp + ' where ' + @strCondition +' and '+@conditionStrend--if @conditionStr<>''--set @strTmp=@strTmp+@conditionStrif @sqlSort<>''set @strTmp = @strTmp+@sqlSort--print @strTmp--print @topstrexec sp_executesql @strTmp


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐源县| 兴国县| 雅江县| 潼关县| 莱西市| 昌乐县| 丹棱县| 商水县| 特克斯县| 马边| 阿坝县| 昌邑市| 陵水| 乐业县| 江油市| 太仆寺旗| 白水县| 龙江县| 石渠县| 阿合奇县| 秭归县| 南投县| 潍坊市| 安岳县| 迁西县| 驻马店市| 台湾省| 浦东新区| 萨迦县| 太仆寺旗| 洪洞县| 乡宁县| 和静县| 玛多县| 布尔津县| 工布江达县| 汉中市| 西乌珠穆沁旗| 兴和县| 玉山县| 盐池县|