小量資料和海量資料分頁顯示儲存過程 (1)

2021-04-18 21:27:05 字數 1312 閱讀 3249

建立乙個 web 應用,分頁瀏覽功能必不可少。這個問題是資料庫處理中十分常見的問題。經典的資料分頁方法是:ado 紀錄集分頁法,也就是利用ado自帶的分頁功能(利用游標)來實現分頁。但這種分頁方法僅適用於較小資料量的情形,因為游標本身有缺點:游標是存放在記憶體中,很費記憶體。游標一建立,就將相關的記錄鎖住,直到取消游標。游標提供了對特定集合中逐行掃瞄的手段,一般使用游標來逐行遍歷資料,根據取出資料條件的不同進行不同的操作。而對於多表和大表中定義的游標(大的資料集合)迴圈很容易使程式進入乙個漫長的等待甚至宕機。

更重要的是,對於非常大的資料模型而言,分頁檢索時,如果按照傳統的每次都載入整個資料來源的方法是非常浪費資源的。現在流行的分頁方法一般是檢索頁面大小的塊區的資料,而非檢索所有的資料,然後單步執行當前行。

最早較好地實現這種根據頁面大小和頁碼來提取資料的方法大概就是「俄羅斯儲存過程」。這個儲存過程用了游標,由於游標的侷限性,所以這個方法並沒有得到大家的普遍認可。

後來,網上有人改造了此儲存過程,下面的儲存過程就是結合我們的辦公自動化例項寫的分頁儲存過程:

create procedure pagination1

(@pagesize int, --頁面大小,如每頁儲存20條記錄

@pageindex int --當前頁碼)as

set nocount on

begin

declare @indextable table(id int identity(1,1),nid int) --定義表變數

declare @pagelowerbound int --定義此頁的底碼

declare @pageupperbound int --定義此頁的頂碼

set @pagelowerbound=(@pageindex-1)*@pagesize

set @pageupperbound=@pagelowerbound+@pagesize

set rowcount @pageupperbound

insert into @indextable(nid) select gid from tgongwen

where fariqi >dateadd(day,-365,getdate()) order by fariqi desc

select o.gid,o.mid,o.title,o.fadanwei,o.fariqi from tgongwen o,@indextable t

where o.gid=t.nid and t.id>@pagelowerbound

and t.id<=@pageupperbound order by t.id

endset nocount off

資料海量分頁儲存過程(2)

use forepress go 物件 storedprocedure dbo usp downloaddata 指令碼日期 02 28 2008 19 06 40 set ansi nulls on goset quoted identifier on go 分頁讀取井資料儲存過程 alter p...

資料海量分頁儲存過程(3)

declare strsql varchar 6000 主語句 declare strtmp varchar 1000 臨時變數 declare strorder varchar 500 排序型別 if ordertype 0 begin set strtmp select min set stro...

海量資料分頁

language vbscript codepage 936 分頁sql語句生成 function getpagesql tblname,fldname,pagesize,pageindex,ordertype,strwhere dim strtemp,strsql,strorder 根據排序方式生...