發布乙個通用的資料分頁的儲存過程

2021-03-31 08:56:58 字數 2102 閱讀 3900

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詳情見:

乙個通用的資料分頁的儲存過程

乙個通用的資料分頁的儲存過程 create procedure sp page tb varchar 20 表名 col varchar 20 按該列來進行分頁 coltype bit,col列的型別,0 數字型別,1 字元型別 collist varchar 800 要查詢出的字段列表 selec...

乙個通用的資料分頁的儲存過程

乙個通用的資料分頁的儲存過程 create procedure sp page tb varchar 20 表名 col varchar 20 按該列來進行分頁 coltype bit,col列的型別,0 數字型別,1 字元型別 collist varchar 800 要查詢出的字段列表 selec...

乙個通用的分頁儲存過程

這是我專案中使用的乙個分頁儲存過程,具有很強的通用性。配合前台asp.net使用50萬條資料基本感不到延遲。資料庫為sqlserver2000。1.分頁儲存過程 create procedure pagination str sql varchar 1000 執行的sql 不含order by 內容...