分享
 
 
 

一个将数据分页的存储过程

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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

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

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='xxxx'+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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有