SQL SERVER的分頁儲存過程

2021-09-05 19:48:00 字數 2004 閱讀 3013

create procedure sp_page

@tb varchar(50), --表名

@col varchar(50), --按該列來進行分頁

@coltype int, --@col列的型別,0-數字型別,1-字元型別,2-日期時間型別

@orderby bit, --排序,0-順序,1-倒序

@collist varchar(800),--要查詢出的字段列表,*表示全部字段

@pagesize int, --每頁記錄數

@page int, --指定頁

@condition varchar(800),--查詢條件

@pages int output --總頁數

as/*

功能描述:對指定表中滿足條件的記錄按指定列進行分頁查詢,分頁可以順序、倒序

查詢可以指定頁大小、指定查詢任意頁、指定輸出字段列表,返回總頁數

作 者:pbsql

版 本:1.10

最後修改:2004-11-29

*/declare @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)

if @condition is null or rtrim(@condition)=''

begin--沒有查詢條件

set @where1=' where '

set @where2=' '

endelse

begin--有查詢條件

set @where1=' where ('+@condition+') and '--本來有條件再加上此條件

set @where2=' where ('+@condition+') '--原本沒有條件而加上此條件

endset @sql='select @pages=ceiling((count(*)+0.0)/'+cast(@pagesize as varchar)+

') from '+@tb+@where2

exec sp_executesql @sql,n'@pages int output',@pages output--計算總頁數

if @orderby=0

set @sql='select top '+cast(@pagesize as varchar)+' '+@collist+

' from '+@tb+@where1+@col+'>(select max('+@col+') '+

' from (select top '+cast(@pagesize*(@page-1) as varchar)+' '+

@col+' from '+@tb+@where2+'order by '+@col+') t) order by '+@col

else

set @sql='select top '+cast(@pagesize as varchar)+' '+@collist+

' from '+@tb+@where1+@col+'<(select min('+@col+') '+

' from (select top '+cast(@pagesize*(@page-1) as varchar)+' '+

@col+' from '+@tb+@where2+'order by '+@col+' desc) t) order by '+

@col+' desc'

if @page=1--第一頁

set @sql='select top '+cast(@pagesize as varchar)+' '+@collist+' from '+@tb+

@where2+'order by '+@col+case @orderby when 0 then '' else ' desc' end

exec(@sql)

go/*使用例項

declare @page as int

exec sp_page 'categories','categoryid',0,0,'*',2,2,'',@page

*/

sqlserver 2000 高效分頁儲存過程

alter procedure pages tablenames varchar 200 表名,可以是多個表,但不能用別名 primarykey varchar 100 主鍵,可以為空,但 order為空時該值不能為空 fields varchar 800 要取出的字段,可以是多個表的字段,可以為空...

sqlserver 2000 高效分頁儲存過程

alter procedure pages tablenames varchar 200 表名,可以是多個表,但不能用別名 primarykey varchar 100 主鍵,可以為空,但 order為空時該值不能為空 fields varchar 800 要取出的字段,可以是多個表的字段,可以為空...

sql server中分頁獲取資料的儲存過程

用的sql server的api,效率上就不知道了。有興趣的朋友可以幫忙測試一下,順便告訴我一下,謝謝 命名上本應用sp 但sql server的api都是sp 打頭的,據說這個字首會先在api裡面尋找,效能下降。想來想去也不願意多打字母,就用xp 了。該儲存過程可以配合昨天發的資料庫訪問類使用。c...