如何实现百万条数据的分页?有什么好的解决办法呢?请高人指点

解决方案 »

  1.   


    --参数说明
    -------------------------------------------------------------
    /*
    @pageSize 每页显示的数量
    @pageIndex ǰ当前显示第几页
    @where 查询条件
    @sortField 排序字段
    */
    CREATE PROCEDURE [dbo].[SelectByPagerParams]
    @pageSize int = 10,
    @pageIndex int = 1,
    @where varchar(8000) = ' 1=1 ',
    @sortField varchar(100) = ' [Id] DESC '
    AS
    SET NOCOUNT ON
    declare @filter varchar(8000)
    set @filter = '
    SELECT TOP ' + CONVERT(VARCHAR(8),@pageSize) + '
    *
    FROM [dbo].[Table]
    where [Id] not in (SELECT TOP ' + CONVERT(VARCHAR(8),@pageSize * (@pageIndex - 1)) 
    + ' [Id] FROM [dbo].[Table]
    WHERE ' + @where + ' ORDER BY ' + @sortField + ' ) AND ' + @where + ' ORDER BY ' + @sortField
    --print @filter 
    exec ( @filter )
    RETURN @@ErrorGO
      

  2.   

    -- =============================================-- 返回目录中商品。
    -- =============================================
    CREATE PROCEDURE [dbo].[GetProductsOnCatalogPromotion]
    (
       @DescriptionLength int,
       @PageNumber int,--页号
       @ProductsPerPage int,--每页显示商品数
       @HowManyProducts int output--输出商品总数
    )AS
    -- declare  Table  建临时表 table
    declare @Products Table 
    (
      RowNumber int,
      ProductID int,
      Name Varchar(50),
      Description Varchar(5000),
      Price Money,
      Image1FileName Varchar(50),
      Image2FileName Varchar(50),
      OnDepartmentPromotion bit,
      OnCatalogPromotion bit
    )
    --填充临时表
     insert into @Products
     select ROW_NUMBER() over (order by Product.ProductID),ProductID,Name,
             substring(Description,1,@DescriptionLength)+'...' as Description,Price,
             Image1FileName, Image2FileName,OnDepartmentPromotion,OnCatalogPromotion
    from Product  
              
     --   @HowManyProducts 总数 赋值  
     select @HowManyProducts=count(ProductID) From  @Products
     
    --分页
     select ProductID,Name,Description,Price,
             Image1FileName, Image2FileName,OnDepartmentPromotion,OnCatalogPromotion
     from @Products
     where RowNumber >(@PageNumber-1)*@ProductsPerPage 
            and RowNumber<=@PageNumber*@ProductsPerPage