create procedure splitpage_sybase @qry varchar(16384),@ipage int,
@num int,@maxpages int = 5000 as
/*@qry sql
語句, @ipage
頁數, @num
每頁記錄條數, @maxpages
最大查詢頁數*/
begin
declare @rcount int
declare @execsql varchar(16384)
if @ipage > @maxpages
begin
select '
輸入頁數[' || convert(varchar,@ipage) || ']
大於最大查詢頁數['
|| convert (varchar,@maxpages) ||']'
return
endselect @rcount=@ipage*@num
set rowcount @rcount --
將查詢語句的select
替換成select sybid=identity(12),
set @execsql = stuff(@qry,charindex('select',@qry),6,'select sybid=identity(12),') --
將查詢語句的from
替換成into #temptable1 from
,先將查詢結果存放到臨時表#temptable1
set @execsql = stuff(@execsql, charindex('from',@execsql),4,'into #temptable1 from') --
重組sql
語句,分頁的核心控制處
set @execsql = @execsql || ' select * from #temptable1 where sybid >'
|| convert(varchar,(@ipage-1)*@num) || ' and sybid <= '
|| convert(varchar,@ipage*@num)
execute (@execsql)
set rowcount 0
end執行儲存過程splitpage_sybase
即可。
exec splitpage_sybase 『sql
查詢語句』,1,100,1000
實現原理: 1)
將原始sql
查詢語句的select
,替換成select sybid=identity(12),
目的是引入分頁的記錄數控制值; 2)
將原始sql
查詢語句的from
,替換成into #temptable1 from
,目的是將查詢結果存入臨時表#temptable1;
3)重組原始sql
查詢語句,加上' select * from #temptable1 where sybid >'
|| convert(varchar,(@ipage-1)*@num)
|| ' and sybid <= '
|| convert(varchar,@ipage*@num)
,實現真正的分頁。
注意事項: 1
)由於該分頁實現是操作臨時表#temptable1
核心欄位sybid
實現的,而sybase
資料庫一張資料表只能有乙個identity
字段,因此原始查詢結果中如果包含identity
欄位就會有問題。如遇到原始查詢結果中包含identity
字段,那麼須將改欄位convert
成其它型別。
sybase分頁儲存過程的實現
sybase分頁儲存過程應該如何實現呢?這是很多人都提到的問題,下面就為您介紹 sybase 分頁儲存過程的寫法,希望可以讓您對sybase分頁儲存過程有更多的了解。create procedure sp php page qry varchar 16384 istart int,ilimit in...
儲存過程實現sybase分頁
create procedure test p ipage int,num int as ipage 頁碼,num 每頁的記錄數 begin declare maxpages int,rcount int maxpages 最大頁碼 if ipage 100 select maxpages ceil...
Sybase分頁顯示儲存過程
實現sybase分頁顯示儲存過程是我們經常會遇到的問題,下面就對sybase分頁顯示儲存過程的方法進行詳細介紹,供您參考。建立乙個web應用,分頁瀏覽功能必不可少。這個問題是資料庫處理中十分常見的問題。經典的資料分頁方法是 ado 紀錄集分頁法,也就是利用ado自帶的分頁功能 利用游標 來實現分頁。...