千萬級分頁儲存過程

2021-04-25 19:16:58 字數 2397 閱讀 5120

create    procedure pagination_jhgl

@tbname varchar(255),        --表名

@tbfields varchar(1000),      --返回字段

@orderfield varchar(255),  --排序的欄位名

@pagesize int,                --頁尺寸

@pageindex int,                --頁碼

@ordertype bit,                --排序型別,1是公升序,0是降序

@strwhere varchar(1500),    --查詢條件

@total int output            --返回總記錄數

asdeclare @strsql varchar(5000)    --主語句

declare @strorder varchar(200)    --排序

declare @strsqlcount nvarchar(500)--查詢記錄總數主語句

declare @strtemp varchar(50)      --排序附加語句

--------------排序-----------------1是降序,0未公升序

if @ordertype !=0

begin

set @strtemp= '>(select max('

set @strorder='order by ' + @orderfield + ' asc '

endelse

begin

set @strtemp= '<(select min('

set @strorder='order by '+ @orderfield + ' desc'

end--------------總記錄數---------------

if @strwhere !=''

begin

set @strsqlcount='select @totalcout=count(*) from  ' + @tbname + 'where  '+ @strwhere

endelse

begin

set @strsqlcount='select @totalcout=count(*) from  ' + @tbname

end--------------如果是第一頁------------

if @pageindex =1

begin

if @strwhere !=''

begin

set @strsql = 'select top' +str(@pagesize)+ ' ' + @tbfields + '  from '+ @tbname +' where ' + @strwhere + ' ' + @strorder

endelse

begin

set @strsql = 'select top' +str(@pagesize)+ ' ' + @tbfields + '  from '+ @tbname + ' ' + @strorder

endend

else

begin

if @strwhere !=''

begin

set @strsql='select top ' +str(@pagesize) + ' ' + @tbfields

+' from ' + @tbname + ' where '+@orderfield +' '

+ @strtemp+ ' ' +@orderfield+ ') from (select top'

+str((@pageindex-1)*@pagesize) + ' '+@orderfield +' from '+@tbname

+ @strwhere+ ' '+ @strorder +') as tb)'+ @strorder

endelse

begin

set @strsql='select top ' + str(@pagesize) + ' ' + @tbfields

+' from ' + @tbname + ' where '+@orderfield + ' '

+ @strtemp+ ' ' +@orderfield+ ') from (select top'

+str((@pageindex-1)*@pagesize) + ' '+@orderfield +' from '+@tbname

+ ' '+ @strorder +') as tb)'+ @strorder

endend

exec sp_executesql @strsqlcount,n'@totalcout int output',@total output

exec(@strsql)

go

百萬級SQL分頁儲存過程

百萬級sql分頁儲存過程,請尊重原作者資訊.我只是更新一部分資料,原作者在分頁的處理過程中有一點錯誤.檢測了程式.發現並休正過來的.descript 分頁儲存過程 author blue.dream date 2004 8 18 21 01 update xqf222 date 18 11 2007...

實現千萬級資料分頁的儲存過程!

經測試,在 14483461 條記錄中查詢第 100000 頁,每頁 10 條記錄按公升序和降序第一次時間均為 0.47 秒,第二次時間均為 0.43 秒,測試語法如下 exec getrecordfrompage news,newsid,10,100000 news 為 表名,newsid 為關鍵...

實現千萬級資料分頁的儲存過程!

經測試,在 14483461 條記錄中查詢第 100000 頁,每頁 10 條記錄按公升序和降序第一次時間均為 0.47 秒,第二次時間均為 0.43 秒,測試語法如下 exec getrecordfrompage news,newsid,10,100000 news 為 表名,newsid 為關鍵...