您好,欢迎访问一九零五行业门户网

分页显示的存储过程(sqlserver 2k)

前两天在做网站时需要手动分页 .一开始用的是 sqldataadapter 的 public int fill(dataset, int, int, string); 但后来发现数据量一但很大时服务器的内存增长非常快 . 原因在这个dataset 包含的记录数将不会多于由maxrecords 指示的记录数。但仍然从服务器返
   前两天在做网站时需要手动分页.一开始用的是 sqldataadapter 的 public int fill(dataset, int, int, string); 但后来发现数据量一但很大时服务器的内存增长非常快. 原因在这个 dataset 包含的记录数将不会多于由maxrecords 指示的记录数。但仍然从服务器返回该查询所生成的整个结果集。
    最后只能改为sql存储过程(其实也是在网上抄来的). --这是分面的存储过程
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)
go
最近在关注sql server2005 ,其t-sql增强方面改了很多,而且网上也有网友写了相对应的分页代码,简单了很多,很值得一试噢。
其它类似信息

推荐信息