`

分页的相关概念及实现

阅读更多

1 )当前页: 即要显示或打开的那一页的页数

       currPage

 

2 )页面大小: 即每页要显示数据的数量

       如:每页都显示 10条数据

       pageSize

 

3 )总数据: 要显示的数据的总数,即要显示的结果集

       totalSize

 

4 )总页数: 即显示总数据需要的页数

       totalPage

 

    它的计算公式为:   (totalSize+pageSize-1)/pageSize

       例如:

       如要显示 17条数据,每页显示 5条,那么总页数 :   totalPage =(17+5-1)/5=4

 

5 )计算当前页的第一条数据   计算公式:

       (currPage-1)*pageSize+1

       例如:    

    如要显示 17 条数据,每页显示 5条,那么第 3页数据 第一条数据是 :

       (3-1)*5+1=11

 

6 )计算当前页的最后一条数据   计算公式:

       (currPage-1)*pageSize+pageSize

       例如:

       如要显示 17 条数据,每页显示 5条,那么第 3页数据 最后一条数据是 :  

       (3-1)*5+5=15

 

SQL SERVER 2005 实现分页的方式


 

 

一: 存储过程方式

if exists( select * from sysobjects where name = 'pro_pageData' )

drop procedure pro_pageData

go

create procedure pro_pageData

    @pageNum int

as  

    select *

    from

    (

       select *, row_number() over ( order by stuid) as rowno

       from student

    ) as s

    where rowno>=( @pageNum- 1)* 5+ 1 and rowno <= ( @pageNum - 1)* 5+ 5;

go

 

exec pro_pageData 4

go

 

二:一般语句方式 ( 预编译 )

select *

    from

    (

       select *, row_number() over ( order by stuid) as rowno

       from student

    ) as s

    where rowno>=( ?- 1)* 5+ 1 and rowno <= ( ?- 1)* 5+ 5;

 

三:按条件查询后再对结果进行分页

select *

    from

    (

       select *, row_number() over ( order by stuid) as rowno

       from student

       where 1 = 1 and stuName like '% %'

    ) as s

    where rowno>=( 1- 1)* 5+ 1 and rowno <= ( 1 - 1)* 5+ 5;

 

注意:第一个where 用来匹配查询条件;
          第二个where 用来显示特定页数据;

 

补充:分页数据的存储过程(完整版)


 

--创建数据库
Create   DataBase  Db_TonyPaging
go

use  Db_TonyPaging
go

if   exists  ( select   1
            
from   sysobjects
           
where   id  =   object_id ( ' DepartDemo ' )
            
and    type  =   ' U ' )
   
drop   table  DepartDemo
go

/* ============================================================== */
/*  Table: DepartDemo                                             */
/* ============================================================== */
create   table  DepartDemo (
   PKID                 
int                    identity ( 1 , 1 ),
   DName                
nvarchar ( 200 )         null ,
   DCode                
nvarchar ( 500 )         null ,
   Manager              
nvarchar ( 50 )          null ,
   ParentID             
int                    null   default   0 ,
   AddUser              
nvarchar ( 50 )          null ,
   AddTime              
datetime               null ,
   ModUser              
nvarchar ( 50 )          null ,
   ModTime              
datetime               null ,
   CurState             
smallint               not   null   default   0 ,
   Remark               
nvarchar ( 500 )         null ,
   F1                   
int                    not   null   default   0 ,
   F2                   
nvarchar ( 300 )         null ,
   
constraint  PK_DEPARTDEMO  primary   key  (PKID)
)
go

truncate   table  DepartDemo
go

/* **************创建54 条测试数据*********************
****************downmoo  3w@live.cn **************
*/

declare   @d   datetime  
set   @d = getdate () 

declare   @i   int
set   @i = 1
while   @i <= 54
begin
    
-- 插入一条测试数据
     insert   into  DepartDemo
    
select   ' 国家统计局房产审计 ' + Cast ( @i   as   Nvarchar ( 10 )) + ' ' , ' 0 ' , ' 胡不归 ' , 0 , ' DemoUser ' , getdate (),
    
'' , ' 1900-01-01 ' , 1 , ' 专业评估全国房价,为老百姓谋福祉 ' , 0 , ''
    
set   @i = @i + 1
end
go


-- ***********分页存储过程用于SQL server2005/2008、2008R2****************************
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
Create   PROCEDURE   [ dbo ] . [ ZJF_CPP_GetPagedRecordFor2005_2008 ]
(
  @Table   varchar ( 1000 ),  -- 表名,多表是请使用 tA a inner join tB b On a.AID = b.AID
  
@TIndex   nvarchar ( 100 ),     -- 主键,可以带表头 a.AID
  
@Column   nvarchar ( 2000 =   ' * ' , -- 读取字段
  
@Sql   nvarchar ( 3000 =   '' , -- Where条件
  
@PageIndex   int   =   1 ,     -- 开始页码
  
@PageSize   int   =   10 ,         -- 页大小
  
@Sort   nvarchar ( 200 =   ''   -- 排序字段
)
AS
declare @strWhere   varchar ( 2000 )
declare   @strsql   nvarchar ( 3900 )
IF   @Sql   IS   NOT   NULL   AND   len ( ltrim ( rtrim ( @Sql ))) > 0
  
BEGIN
   
SET   @strWhere   =   '  WHERE  '   +   @Sql   +   '   '
  
END
ELSE
  
BEGIN
   
SET   @strWhere   =   ''
  
END
        
if  ( charindex ( ltrim ( rtrim ( @TIndex )), @Sort ) = 0 )
begin
    
if ( @Sort = '' )
        
set   @Sort   =   @TIndex   +   '  DESC  '
    
else
        
set   @Sort   =   @Sort +   '  ,  ' + @TIndex   +   '  DESC  '
end
IF   @PageIndex   <   1
  
SET   @PageIndex   =   1

        
if   @PageIndex   =   1   -- 第一页提高性能
         begin  
          
set   @strsql   =   ' select top  '   +   str ( @PageSize + '   ' + @Column
                      
+   '   from  '   +   @Table   +   '   '   +   @strWhere   +   '  ORDER BY   ' +   @Sort
        
end  
        
else
          
begin
           
/* Execute dynamic query */     
            
DECLARE   @START_ID   nvarchar ( 50 )
            
DECLARE   @END_ID   nvarchar ( 50 )
            
SET   @START_ID   =   convert ( nvarchar ( 50 ),( @PageIndex   -   1 *   @PageSize   +   1 )
            
SET   @END_ID   =   convert ( nvarchar ( 50 ), @PageIndex   *   @PageSize )
            
set   @strsql   =    '  SELECT  ' + @Column +   '
           FROM (SELECT ROW_NUMBER() OVER(ORDER BY 
' + @Sort + ' ) AS rownum, 
             
' + @Column +   '
              FROM 
' + @Table   + '  WITH(NOLOCK)  '   +   @strWhere   + ' ) AS D
           WHERE rownum BETWEEN 
' + @START_ID + '  AND  '   + @END_ID   + '  ORDER BY  ' + @Sort
          
END
EXEC ( @strsql )
print   @strsql
    
set   @strsql   =   ' SELECT  Count(1) as TotalRecords FROM  '   +   @Table   + '  WITH(NOLOCK)  '   +   @strWhere   
print   @strsql
EXEC ( @strsql )
分享到:
评论

相关推荐

    mysql数据库实现分页

    以下是对分页实现的详细说明: 一、基础概念 分页是将数据库查询结果分割成多个页面,每次请求只返回一部分数据,而不是一次性返回所有数据。这在Web应用中尤其常见,如搜索引擎、电商网站等,用户通常会通过点击...

    WPF 分页DataGrid 分页控件的实现

    在wpf.MSPageNavigationTest这个示例项目中,你可以找到具体的代码实现和更详细的示例,包括如何将这些概念应用到实际的分页控件中。 总的来说,通过正确使用ICollectionView和适当的事件处理,WPF开发者可以轻松地...

    java 真假分页,jsp servlet 实现的真分页与假分页

    ### 真分页与假分页概念 **假分页**,又称为内存分页,其主要特点是服务器一次性加载所有数据到内存中,然后根据用户请求的页码在内存中进行分页展示。这种方法的优点在于实现简单,但缺点也很明显,当数据量大时,...

    SSM框架分页的实现

    首先,理解分页的基本概念。分页是将大量数据分成若干小部分,每次只加载一部分数据到前端展示,避免一次性加载所有数据导致内存压力过大,提升页面加载速度。分页通常包含当前页、总页数、每页显示条数等参数。 1....

    java分页 动态代理 aop实现

    在Java编程领域,分页是数据管理中一个重要的概念,特别是在大数据量的Web应用中,为了提高用户体验,通常需要将数据分批次展示。本话题主要围绕"Java分页"、"动态代理"以及"AOP(面向切面编程)"在Spring框架中的...

    分页功能实现java

    在Java Web开发中,实现分页功能通常涉及前端页面(JSP)和后端代码(Java)的协同工作。而这里提到的Eclipse、Struts、Hibernate则是Java开发中常用的工具和框架,分别用于集成开发环境、MVC模式的Web层框架和对象...

    基本分段和分页管理系统实现

    在本文中,我们将深入探讨基本的分段和分页管理系统实现,这是操作系统中的核心概念。这两种方法都用于将进程的虚拟地址空间映射到物理内存中,以解决内存碎片问题并提高资源利用率。 首先,让我们了解一下分段内存...

    分页工具类分页工具类

    下面将详细讨论分页工具类的核心概念、实现方式以及常见应用场景。 一、分页核心概念 1. 数据总量:在进行分页时,首先要确定待分页数据的总数,这通常通过查询数据库得到。 2. 每页大小:每一页显示的数据条目...

    js分页功能实现

    **标题解析:**“js分页功能实现”指的是在网页应用中使用JavaScript来实现数据的分页展示。分页是用户界面中常见的功能,用于将大量数据分成小块,逐页加载,提高用户体验并减轻服务器压力。 **描述分析:**虽然...

    jquery实现数据动态加载分页的完整版

    本文将深入探讨如何使用jQuery实现数据动态加载分页,并提供一个完整的实例。 首先,理解动态加载(也称为无限滚动或懒加载)的概念。它允许页面在用户滚动时按需加载内容,而不是一次性加载所有数据,从而减少了首...

    android Gridview分页实现

    本篇文章将详细讲解如何在Android中利用GridView实现分页加载功能。 首先,理解GridView的基本概念。GridView是ListView的一种变体,它按照指定的列数来排列子视图。默认情况下,GridView会一次性加载所有数据,这...

    orcl数据库分页源码通过数据库实现分页

    首先,理解分页的基本概念至关重要。分页允许用户逐页查看数据,而不是一次性加载所有记录。这减少了网络传输的数据量,降低了服务器压力,提高了页面加载速度。在Oracle数据库中,我们可以利用SQL查询的特定语法来...

    js实现的分页

    本文将深入探讨如何使用JavaScript实现分页功能,以及相关的技巧和注意事项。 首先,我们需要理解分页的基本概念。通常,一个分页系统包括以下几个关键部分: 1. **总记录数**:这是你要展示的数据总数。 2. **每...

    mysql数据库实现的分页javaWEB开发实现

    首先,我们要了解分页的基本概念。分页是将数据库查询结果分割成若干个页面进行显示,每个页面包含一定数量的数据记录。这有助于减少网络传输的数据量,同时使用户可以更方便地浏览和查找所需信息。 在MySQL中,...

    SSH基础上分页功能的实现

    4. **创建分页信息容器**:在业务逻辑层,我们需要创建一个`PageBean`或类似的对象,用于存储分页的相关信息,如当前页、总页数、每页记录数等。 ```java public class PageBean&lt;T&gt; { private int pageNo; ...

    web实现简单分页

    在Web开发中,分页是一种常见的用户界面设计技术,它用于处理大量的数据并提供良好的用户体验。当一个网页上的数据量过大时...在"PageDemo"中,你可以深入研究这些概念并动手实践,从而更好地理解和掌握Web分页的实现。

    C#DataGridView分页显示功能实现

    在C# WinForm开发中,`DataGridView`是一个常用的控件,用于展示数据表格。...理解这些核心概念后,你可以根据具体需求对代码进行调整和扩展,确保分页功能在你的C# WinForm项目中高效且稳定地工作。

    react-一款简单的react组件实现的分页

    在React开发中,分页是常见的功能之一,用于在大量数据中进行导航。"react-一款简单的react组件实现的分页"是一个实例,它展示...通过理解React的基本概念和实践,你可以根据自己的需求定制出满足各种场景的分页组件。

    用struts实现的分页

    首先,我们需要理解分页的基本概念。分页是指将一个大数据集合分割成多个小部分,每次只显示一部分,用户可以通过翻页来查看其他部分。在Web应用中,这通常通过请求参数来控制,如当前页码和每页显示的条目数量。 1...

    javaee分页实现

    下面将详细介绍JavaEE分页的基本原理、实现方式以及相关的技术。 1. 分页的基本概念 分页是一种数据处理策略,用于将大量的数据分割成若干小块,每次只加载一部分,这样既可以减少服务器压力,又能提高页面加载...

Global site tag (gtag.js) - Google Analytics