用於分頁的儲存過程

2021-03-31 15:35:23 字數 2120 閱讀 2932

create procedure sp_page

@tb varchar(50), --表名

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

@col1 varchar(50), --按該列來進行排序

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

@orderby bit, --分頁列排序,0-順序,1-倒序

@orderby1 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=' '

end

else

begin--有查詢條件

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

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

end

set @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

set @sql='select * from ('+@sql+') a order by '+@col1+case @orderby1 when 0 then '' else ' desc' end

exec(@sql)

分頁儲存過程 分頁儲存過程

分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...

分頁的儲存過程

alter procedure sql conn sort tblname varchar 255 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 頁尺寸 pageindex int 頁碼 doc...

儲存過程的分頁!!

create proc up gettopiclist a strforumid varchar 50 a intpageno int a intpagesize int as 定義區域性變數 declare intbeginid int declare intendid int declare i...