方法一(任何條件的sql語句'):
create procedure xiaozhengge
@sqlstr nvarchar(4000), --查詢字串
@currentpage int,--第n頁
@pagesize int--每頁行數
asset nocount on
declare @p1 int,--p1是游標的id
@rowcount int
exec sp_cursoropen @p1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 當前頁
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @p1,16,@currentpage,@pagesize
exec sp_cursorclose @p1
set nocount off
測試: xiaozhengge '任何條件的sql語句',2,10
方法二(前面的頁面記取快,越往後讀越慢):
lihonggen0(李洪根,ms mvp)
假若你用幾十萬行資料,你可以看看.
你的儲存過程還比不上not in分頁,示例:
select top 10 * from customers where customerid not in (select top 20 customerid from customers )
declare @sqlstr varchar(8000)
set @sqlstr='select top '+cast(@每頁大小 as varchar)+' * from 表 where 主鍵列 not in (select top '+cast(@每頁大小*@第幾頁 as varchar)+' 主鍵列 from 表 )'
exec(@sqlstr)
我個人認為最好的分頁方法是:
select top 10 * from table where id>200
寫成儲存過程,上面的語句要拼一下sql語句,要獲得最後大於的哪乙個id號
分頁儲存過程 分頁儲存過程
分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...
分頁儲存過程
create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...
分頁儲存過程
create procedure pro select pageindex int,pagesize int as select student.sno,student.sname,student.s grade.math,grade.physics,grade.huaxue,grade.chine...