求分页存储过程
我现在有一个大型数据库,有500千万条记录,我要对其进行分页,只希望每次取500条出来。请高手帮忙,分页存储过程!谢谢! 问题点数:20、回复次数:18Top
1 楼fancyf(凡瑞)回复于 2005-06-02 21:54:01 得分 0
http://community.csdn.net/Expert/TopicView.asp?id=3662163Top
2 楼y7967(三千)回复于 2005-06-02 22:00:20 得分 0
upTop
3 楼huangguolinc(来了)回复于 2005-06-03 12:44:36 得分 10
------------------------------------------------------------------------------------
-----大量数据的分页
------------------------------------------------------------------------------------
--查询
if exists (select name from sysobjects where name='ResultRows' and type='p')
drop procedure ResultRows
go
CREATE PROCEDURE ResultRows
(
@SQLString nVARCHAR(4000),
@PageCount int,
@ColumnID VARCHAR(255),
@ColumnSort VARCHAR(255)
)
AS
DECLARE @Str nVARCHAR(4000)
SET @Str='SELECT TOP 20 * FROM ('+@SQLString+') T WHERE T.'+@ColumnID+' NOT IN
(SELECT TOP '+CAST((20*(@PageCount-1)) AS VARCHAR(20))+' '+@ColumnID+' FROM ('+@SQLString+') T9 ORDER BY '+@ColumnSort+' desc) ORDER BY '+@ColumnSort+' desc'
--PRINT @Str
EXEC sp_ExecuteSql @Str
GO
在其他存储过程中调用
--单据列表
if exists (select name from sysobjects where name='SaleBillList' and type='p')
drop procedure SaleBillList
go
create procedure SaleBillList
@SaleBargainClient varchar(255),
@SaleFinishDepartment varchar(255),
@SaleFinishPort varchar(255),
@SaleFinishShipName varchar(255),
@PageCount varchar(20)
with encryption
as
declare @SqlString varchar(4000)
set @SqlString='select * from SaleBill,SaleFinish,SalePerform,SaleBargain where SaleBillFinishID=SaleFinishID and SaleFinishPerformID=SalePerformID and SalePerformBargainID=SaleBargainID'
if(@SaleBargainClient<>'')set @SqlString=@SqlString+' and SaleBargainClient like '+'''%'+@SaleBargainClient+'%'''
if(@SaleFinishDepartment<>'')set @SqlString=@SqlString+' and SaleFinishDepartment='+''''+@SaleFinishDepartment+''''
if(@SaleFinishPort<>'')set @SqlString=@SqlString+' and SaleFinishPort like '+'''%'+@SaleFinishPort+'%'''
if(@SaleFinishShipName<>'')set @SqlString=@SqlString+' and SaleFinishShipName like '+'''%'+@SaleFinishShipName+'%'''
exec ResultRows @SqlString,@PageCount,'SaleBillID','SaleBillID'
go
Top
4 楼minghui000(沉迷网络游戏)回复于 2005-06-03 13:02:46 得分 0
帮您顶一下Top
5 楼doitnow2000(大海)回复于 2005-06-04 12:05:36 得分 0
有没有Oracle的存储过程。帮忙一下,谢谢!Top
6 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-06-04 12:31:31 得分 0
每一页500条也太多了吧!Top
7 楼doitnow2000(大海)回复于 2005-06-04 16:07:58 得分 0
实在没有办法呀,只能这样子了,数据量太大了。
但是在该页我可以提供查询。
求Oracle存储过程。
Top
8 楼itflying(it学习者 )回复于 2005-06-04 16:34:43 得分 10
create procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int,--第N页
@pagesize int--每页行数
as
set nocount on
declare @P1 int,--P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off
Top
9 楼wjjdnajj(色空)回复于 2005-06-04 16:39:43 得分 0
路过看看热闹Top
10 楼LaoDai_Net(『老代』)回复于 2005-06-04 16:42:48 得分 0
可以去 webdiyer 的主页上去 有个存储过程工具 自动生成分页存储过程
http://www.webdiyer.com/utility/procgen.aspxTop
11 楼renyu732(Sysinfo)回复于 2005-06-04 16:44:00 得分 0
为什么不考虑本版斑竹陕北吴旗娃的分页控件呢?
http://www.webdiyer.comTop
12 楼renyu732(Sysinfo)回复于 2005-06-04 16:45:16 得分 0
哦。。
呵呵
有人在我之前介绍过了Top
13 楼njbaige(白鸽)回复于 2005-06-04 17:12:32 得分 0
http://community.csdn.net/Expert/topic/3292/3292678.xml?temp=.1955835Top
14 楼doitnow2000(大海)回复于 2005-06-04 17:18:46 得分 0
看了,只是想写,看看大家的意见。Top
15 楼superdullwolf(超级大笨狼,每天要自强,MVP)回复于 2005-06-04 17:54:44 得分 0
分页的原理
declare @SQLStr varchar(8000)
set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
exec(@SQLStr)Top
16 楼minghui000(沉迷网络游戏)回复于 2005-06-05 01:30:54 得分 0
帮您顶一下Top
17 楼doitnow2000(大海)回复于 2005-06-06 19:09:15 得分 0
TO
superdullwolf(超级大笨狼,每天要自强)
如果访问者要到最后一页,那速度就非常慢,可想一个500千万条记录。会等死人的。Top
18 楼doitnow2000(大海)回复于 2005-06-06 19:10:21 得分 0
求Oracle存储过程。Top




