過程1:
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 本儲存過程高效,曾用500萬條資料測試(已建索引),只返回分頁只需3秒,影響效率的地方是計算總頁數,若不需要可以注釋掉
--測試示例
declare @pages int
select identity(int,1,1) id,getdate() dt,xx=cast('' as varchar(10)) into #t
from sysobjects
update #t set dt=dateadd(day,id-200,dt),
xx='***x'+right('000000'+cast(id as varchar(10)),6)
exec sp_page '#t','id',0,0,'*',10,2,'',@pages output--按id順序取第二頁
exec sp_page '#t','id',0,1,'*',10,2,'',@pages output--按id倒序取第二頁
exec sp_page '#t','xx',1,0,'*',10,3,'',@pages output--按xx順序取第三頁
exec sp_page '#t','xx',1,1,'*',10,3,'',@pages output--按xx倒序取第三頁
exec sp_page '#t','dt',2,0,'*',10,2,'',@pages output--按dt順序取第二頁
exec sp_page '#t','dt',2,1,'*',10,2,'',@pages output--按dt倒序取第二頁
select 總頁數
=@pages
drop table #t
過程2:
create procedure [dbo].[getpagedata]
@fieldsname nvarchar(4000),--欄位名
@tablename nvarchar(500),--表名
@condition nvarchar(4000),
@sort nvarchar(4000),--排序
@pagesize int=10,
@pagenum int=1 out,
@rowcount int=0 out,
@pagecount int=0 out,
@debug nvarchar(4000) out
asif @condition!=''
set @condition=' where '+@condition
if @sort!=''
set @sort=' order by '+@sort
else
begin
set @debug='排序有錯 fields [asc|desc]'
return
enddeclare @sqlstr nvarchar(4000) -- 主語句
declare @unsort nvarchar (4000)
declare @count int
declare @lastcount int
set @unsort=replace(@sort,'asc','xs')
set @unsort=replace(@unsort,'desc','asc')
set @unsort=replace(@unsort,'xs','desc')
set @sqlstr='select @count=count(*) from '+@tablename+' '+@condition
exec sp_executesql @sqlstr,n'@count int out ',@count out
set @rowcount=@count
set @pagecount=@count/@pagesize
set @lastcount=@count%@pagesize
if @lastcount>0
begin
set @pagecount=@pagecount+1
endif(@pagenum<=0)
begin
set @pagenum=1
endif((@pagenum*@pagesize)>=@rowcount)
begin
set @pagenum=@pagecount
endif ((@pagenum*@pagesize)>=@rowcount) and (@lastcount>0)
begin
set @sqlstr='select * from (select top '+cast(@lastcount as varchar) +' '+@fieldsname+' from (select top '+cast(@pagenum*@pagesize as varchar) +' '+@fieldsname+' from '+@tablename+' '+@condition+' '+@sort+') as tmp '+@unsort+' ) as tmp '+@sort
endelse
begin
set @sqlstr='select * from (select top '+cast(@pagesize as varchar) +' '+@fieldsname+' from (select top '+cast(@pagenum*@pagesize as varchar) +' '+@fieldsname+' from '+@tablename+' '+@condition+' '+@sort+') as tmp '+@unsort+' ) as tmp '+@sort
endset @debug=@sqlstr
exec (@sqlstr)
go
乙個將資料分頁的儲存過程
create procedure sp page tb varchar 50 表名 col varchar 50 按該列來進行分頁 coltype int,col 列的型別,0 數字型別,1 字元型別,2 日期時間型別 orderby bit,排序,0 順序,1 倒序 collist varchar...
乙個將資料分頁的儲存過程
create procedure sp page tb varchar 50 表名 col varchar 50 按該列來進行分頁 coltype int,col 列的型別,0 數字型別,1 字元型別,2 日期時間型別 orderby bit,排序,0 順序,1 倒序 collist varchar...
乙個將資料分頁的儲存過程
csdn 文件中心 資料庫開發 標題 乙個將資料分頁的儲存過程選擇自 pbsql 的 blog 關鍵字乙個將資料分頁的儲存過程 出處create procedure sp page tb varchar 50 表名 col varchar 50 按該列來進行分頁 coltype int,col 列的...