sqlserver2000海量数据分页的问题

kanodo 2007-02-08 01:39:23
本来网上找的海量分页方法,就是top 20 .... where id>.......这样
但是如果作为主键的ID如果乱掉的话,是没办法排序的.
我现在就遇到这种问题,网上找了一下,2005里很支持分页
select * from(select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders) a
where row between 20 and 30
这样就行了

不过我地方没办法用2005,所以得从2000地方想办法了,谁知道2000里,怎么实现2005里的ROW_NUMBER() 涵数功能
...全文
451 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanodo 2007-02-09
  • 打赏
  • 举报
回复
up
kanodo 2007-02-08
  • 打赏
  • 举报
回复
在数据库中实现分页,必须考虑服务器的性能,海量数据尽量不要在数据库中分页,用临时表会增大temp数据库,和I/O操作,尽量做在前端程序中!

-----------------------------------------------------------------------

那数据库里不分的话,总不见得我把100000条数据放到内存里再给用户罗
kanodo 2007-02-08
  • 打赏
  • 举报
回复
create PROCEDURE dbo.GetPagingRecord
(
@tablename varchar(100),--表名或视图表
@fieldlist varchar(4000)='*',--欲选择字段列表
@orderfield varchar(100),--排序字段
@keyfield varchar(100),--主键
@pageindex int,--页号,从0开始
@pagesize int=20,--页尺寸
@strwhere varchar(4000),--条件
@ordertype bit=1--排序,1,降序,0,升序
)
AS
/**//*
名称:GetPagingRecord
作用:按任意字段进行排序分页
作者:菩提树(MARK MA)
时间:2004-12-14
声明:此代码你可以无偿使用及转载,但在转载时,请勿移称本文字声明
*/
SET NOCOUNT ON
declare @sqlstr varchar(6000)
--处理SQL中危险字符,并且将条件处理成易嵌入的形式
set @strwhere=replace(@strwhere,'''','''''')
set @strwhere=replace(@strwhere,'--','')
set @strwhere=replace(@strwhere,';','')
set @sqlstr='declare @CurPageNum int;'
set @sqlstr=@sqlstr+'declare @nextpagenum int;'
set @sqlstr=@sqlstr+'set @curpagenum='+cast(@PageIndex as varchar)+'*'+cast(@Pagesize as varchar)+';'
set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex+1 as varchar)+'*'+cast(@Pagesize as varchar)+';'
set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);'
if @ordertype=1
begin
set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from

'+@tablename+' where '+@strwhere+' order by '+@orderfield+' desc ) as a where '+@keyfield+' not in (

select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'

order by '+@orderfield+' desc) order by '+@orderfield+' desc'';'
end
else
begin
set @sqlstr=@sqlstr+'set @sqlstr=''select '+@fieldlist+' from ( select top ''+cast(@nextpagenum as varchar)+'' * from

'+@tablename+' where '+@strwhere+' order by '+@orderfield+' asc ) as a where '+@keyfield+' not in (

select top ''+cast(@curpagenum as varchar)+'' '+@keyfield+' from '+@tablename+' where '+@strwhere+'

order by '+@orderfield+' asc) order by '+@orderfield+' asc'';'
end
set @sqlstr=@sqlstr+'execute( @sqlstr)'
--print @sqlstr
execute(@sqlstr)


--------------------------------------------------------

以上我找来的,好像是csdn的前辈的样子
但不知道为什么,我觉得好像有点不对的样子.
xiangyu120 2007-02-08
  • 打赏
  • 举报
回复
在数据库中实现分页,必须考虑服务器的性能,海量数据尽量不要在数据库中分页,用临时表会增大temp数据库,和I/O操作,尽量做在前端程序中!
haoyuzhou009 2007-02-08
  • 打赏
  • 举报
回复
同求~
kanodo 2007-02-08
  • 打赏
  • 举报
回复
up
kanodo 2007-02-08
  • 打赏
  • 举报
回复
2000里我用临时表的

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧