• 简单高效的分页解决方案


        项目需求:数据库有5000条记录,每页显示20条,要求实现每翻一页就读取当前页的20条数据;

        解决方案:根据传入的页码和每页显示的记录数查询出相应的数据

                    1>第一页:select Top 10 * from TableName

                    2>以后各页:select row_number() over(order by code) rownum,* into #table  from [tableName]                            

                   select * from #table where rownum in (@CurrentPageIndex*@PageSize+1,@CurrentPageIndex*@PageSize+10)

                     //注:(@CurrentPageIndex为传入的当前页的页码,@PageSize为每页显示的记录的条数)

                    


    -- =============================================
    -- Author:  <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description: <Description,,>
    -- =============================================
    alter PROCEDURE [dbo].[sp_PageView]
     @strSql nvarchar(1000),
     @FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
     @PageCurrent int=1,       --要显示的页码
     @PageSize int=10,         --每页的大小(记录数)
     @PageCount int OUTPUT,    --总页数
     @ListCount int OUTPUT     --数据总条数

    AS
    BEGIN

        IF @PageCount IS NULL OR @PageCount=0
     BEGIN
        declare @sqlListCount nvarchar(2000),@sqlstr nvarchar(2000),@mod int,@except int
        set @sqlListCount=N'select @a=count(1) from ('+@strSql+')t'
        exec sp_executesql @sqlListCount,N'@a int output',@ListCount output

        set @mod   = @ListCount % @PageSize
        set @except= @ListCount / @PageSize
        if @mod=0
           begin
              set @PageCount =@except
           end
        else
           begin
              set @PageCount =@except+1
           end
     END

       set @sqlstr=N'select * from ('
                  +N'select row_number() over (order by '+@FieldKey+') rownum,'+substring(ltrim(lower(@strSql)),7,3000)
                  +N')z where rownum between '+cast(((@PageCurrent-1)*@PageSize+1) as nvarchar(20))
                  +N' and '+cast(@PageCurrent*@PageSize as nvarchar(20))
       exec (@sqlstr)
       --select @ListCount,@PageCount
    END


     

  • 相关阅读:
    构建之法阅读笔记04
    构建之法阅读笔记03
    关于博客园的一些建议
    书的价钱
    找水王续
    《用户故事与敏捷开发》阅读笔记04
    每周学习进度——第六周
    每周学习进度——第五周
    《用户故事与敏捷开发》阅读笔记03
    软件需求与分析课堂讨论一
  • 原文地址:https://www.cnblogs.com/zhangzt/p/1621660.html
Copyright © 2020-2023  润新知