程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> Sybase分頁顯示存儲過程

Sybase分頁顯示存儲過程

編輯:SyBase綜合文章

實現Sybase分頁顯示存儲過程是我們經常會遇到的問題,下面就對Sybase分頁顯示存儲過程的方法進行詳細介紹,供您參考。

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

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

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

下面的存儲過程就是結合我們的辦公自動化實例寫的Sybase分頁存儲過程:

  1. CREATE procedure pagination1  
  2.  
  3. (@pagesize int,   --頁面大小,如每頁存儲20條記錄  
  4.  
  5. @pageindex int    --當前頁碼  
  6.  
  7. )  
  8.  
  9. as  
  10.  
  11. set nocount on  
  12.  
  13. begin  
  14.  
  15. declare @indextable table(id int identity(1,1),nid int)   --定義表變量  
  16.  
  17. declare @PageLowerBound int   --定義此頁的底碼  
  18.  
  19. declare @PageUpperBound int   --定義此頁的頂碼  
  20.  
  21. set @PageLowerBound=(@pageindex-1)*@pagesize  
  22.  
  23. set @PageUpperBound=@PageLowerBound+@pagesize  
  24.  
  25. set rowcount @PageUpperBound  
  26.  
  27. insert into @indextable(nid) select gid from TGongwen where fariqi >dateadd(day,-365,getdate()) order by fariqi desc  
  28.  
  29. select O.gid,O.mid,O.title,O.fadanwei,O.fariqi from TGongwen O,@indextable t where O.gid=t.nid  
  30.  
  31. and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id  
  32.  
  33. end  
  34.  
  35. set nocount off  
  36.  

以上存儲過程運用了SQL SERVER的最新技術――表變量。應該說這個存儲過程也是一個非常優秀的分頁存儲過程。當然,在這個過程中,您也可以把其中的表變量寫成臨時表:CREATE TABLE #Temp。但很明顯,在SQL Server中,用臨時表是沒有用表變量快的。所以剛開始使用這個存儲過程時,感覺非常的不錯,速度也比原來的ADO的好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved