SQL 分頁通用儲存過程

2021-08-23 13:45:18 字數 1644 閱讀 6124

這是乙個通用的分頁儲存過程,利用的是sql的系統游標

這種效率並不是很好

create proc sp_pageview

@sql ntext, --要執行的sql語句

@pagecurrent int=1,

@pagesize int=10,

@pagecount int output

asset nocount on

declare @p1 int

--初始化分頁游標

exec sp_cursoropen

@cursor=@p1 output,

@stmt=@sql,

@scrollopt=1,

@ccopt=1,

@rowcount=@pagecount output

--計算總頁數

if isnull(@pagesize,0)<1

set @pagesize=10

set @pagecount=(@pagecount+@pagesize-1)/@pagesize

if isnull(@pagecurrent,0)<1 or isnull(@pagecurrent,0)>@pagecount

set @pagecurrent=1

else

set @pagecurrent=(@pagecurrent-1)*@pagesize+1

--顯示指定頁的資料

exec sp_cursorfetch @p1,16,@pagecurrent,@pagesize

--關閉分頁游標

exec sp_cursorclose @p1

建議使用下面這種,不過並不怎麼通用,效率要好很多了,試著寫成通用,但是表變數不好在動態sql中使用:

create proc proc_paged

(@pagesize int,

@pagenum int,

@pagecount int output)as

begin

--宣告變數

declare @tmptable table(id int identity (1,1),userid nchar(5))

declare @idbengin int

declare @idend int

--構造記憶體表

insert into @tmptable (userid )(select member_inner_code from mo_member)

select @pagecount=count(*) from @tmptable

if(@pagecount%@pagesize>0)

set @pagecount=@pagecount/@pagesize+1

else

set @pagecount=@pagecount/@pagesize

set @idbengin=(@pagenum-1)*@pagesize

set @idend=@idbengin+@pagesize

select t2.id,t1.* from mo_member t1,@tmptable t2 where t1.member_inner_code=t2.userid and

t2.id>@idbengin and t2.id<=@idend

endgo

Sql通用分頁儲存過程

這個是乙個基於framework平台,c 語言與sql建立分頁儲存過程 1.使用dbhelpersql幫助類 2,ado連線資料庫 3,通用儲存過程 create proc dbo p paging tablename varchar 8000 表名 檢視名 pagesize int 10,頁面顯示...

通用儲存過程 分頁儲存過程

名稱 spall returnrows 輸入 輸出 呼叫 exec spall returnrows select from 表名 頁號,返回記錄數,主鍵 排序字段 spall returnrows select from all categories 2,10,id id 說明 百萬級 通用儲存過...

SQL查詢通用儲存過程(可分頁)

以前參考過網上朋友 是誰忘了,知道的說一聲 寫的,但感覺有點不適合我的要求。修改大部分後如下所示。getrecordpagetotal為分頁時取得頁總數。當然可以寫在getrecordbypage裡,但個人認為那樣的話,在只取頁總數的情況下也要使用getrecordbypage,查詢效率不太好,就分...