sql2000存储过程分页,能返回总记录数

解决方案 »

  1.   

    create procedure procedureName
    @pageIndex int,
    @pageSize int,
    @pageCount int output,
    @count int output
    as
    set @count=(select count(1) from tableName)
    if(@count%@pageSize=0)
    begin
         set @pageCount=@count/@pageSize
    end
    else
    begin
         set @pageCount=@count/@pageSize
    end
    declare @delete int
    set @delete=(@pageIndex-1)*@pageSize
    declare @sql nvarchar(200)
    set @sql='select top '+cast(@pageSize as varchar(12))+' * from tableName where id not in (select top '+cast(@delete as varchar(12))+' id from tableName)'
    execute sp_executesql @sql
    也可以根据自己的需要多设定一些参数的 我这里是一个简单的分页存储过程 不是通用的
      

  2.   

       数量较小可以采用sql分页读取:    两个参数:   PageSize:每页的行数      PageIndex:页数
          string sql = select count(*) from 表名;select top " + PageSize + " * from  表名 where id not in (select top " + (PageIndex - 1) * PageSize + " id from 表明 order by id) order by id   在后台:
       ViewState["pageindex"] 保存当前的页数  ViewState["pagecount"] 保存总的页数 
       decimal Sum= decimal.Parse(ds.Tables[0].Rows[0][0].ToString())   获取总的行数
       int pagecount = int.Parse(Math.Ceiling(Sum/pagesize).ToString()) 获取总的页数
       
       在前台:
       可以根据你输入的每页显示行数,需要到第几页.. 直接从数据库中读取显示
      

  3.   

    参考来源:http://topic.csdn.net/u/20081106/10/edea2c7c-0a15-47c1-b9c1-26ddc7ce90db.html
    USE [game]
    GO
    /****** 对象:  StoredProcedure [dbo].[page]    脚本日期: 05/21/2008 11:37:12 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GOCREATE proc [dbo].[page]
    @RecordCount int output,
    @ReturnCount bit,
    @QueryStr nvarchar(1000)='table1',--表名、视图名、查询语句
    @PageSize int=20,  --每页的大小(行数)
    @PageCurrent int=2,  --要显示的页 从0开始
    @FdShow nvarchar (2000)='*', --要显示的字段列表
    @IdentityStr nvarchar (100)='id', --主键
    @WhereStr nvarchar (2000)='1=1',
    @FdOrder nvarchar(100)='desc' --排序    只能取desc或者asc
    asset nocount ondeclare@sql nvarchar(2000)
    if @WhereStr = '' begin
     set @WhereStr = '1=1'
    endif @ReturnCount=1 begin
     declare @tsql nvarchar(200)
     set @tsql=N'select @RecordCount = count(*) from ' + @QueryStr + ' where ' + @WhereStr
     exec sp_executesql @tsql,N'@RecordCount int output',@RecordCount output
    endif @PageCurrent = 0 begin
     set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' ' + @FdOrder
    endelse begin
     if upper(@FdOrder) = 'DESC' begin
      set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '< ( select min(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' desc) as t) order by ' + @IdentityStr + ' desc'
     end
     else begin
      set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '> ( select max(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' asc) as t) order by ' + @IdentityStr + ' asc'
     end
    end
    --print @sql
    execute(@sql)如果在程序中用分页存储过程还不如用第三方控件aspnetpager然后用一个很简单的SQL 语句即可
      

  4.   

    数据量大的时候最好不要用not in