`
spring028
  • 浏览: 44705 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用SQL实现分页的三种方法

SQL 
阅读更多

表中主键必须为标识列,[ID] int IDENTITY (1,1)

 
   1.分页方案一:(利用Not In和SELECT TOP分页)
 

 语句形式:
 SELECT TOP 10 *
 
FROM TestTable
 WHERE (ID NOT IN
 
          (SELECT TOP 20 id
          FROM TestTable
          ORDER BY id))
 ORDER BY ID
 
 
 SELECT TOP 页大小 *
 
FROM TestTable
 WHERE (ID NOT IN
 
          (SELECT TOP 页大小*页数 id
          FROM 表
          ORDER BY id))
 ORDER BY ID
 
    2.分页方案二:(利用ID大于多少和SELECT TOP分页)
   3.分页方案三:(利用SQL的游标存储过程分页)

 create  procedure SqlPager
 @sqlstr nvarchar(4000), --查询字符串
 
@currentpage int, --第N页
 
@pagesize int --每页行数
 
as
 
set nocount on
 
declare @P1 int, --P1是游标的id
 
 @rowcount int
 
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
 select ceiling(1.0*@rowcount/@pagesizeas 总页数--,@rowcount as 总行数,@currentpage as 当前页 
 
set @currentpage=(@currentpage-1)*@pagesize+1
 
exec sp_cursorfetch @P1,16,@currentpage,@pagesize 
 exec sp_cursorclose @P1
 
set nocount off
 
 其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
 建议优化的时候,加上主键和索引,查询效率会提高。
 
 通过SQL 查询分析器,显示比较:我的结论是:
 分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
 分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句
 分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

语句形式:
   SELECT TOP 10 *
 
FROM TestTable
 WHERE (ID >
 
          (SELECT MAX(id)
          FROM (SELECT TOP 20 id
                  FROM TestTable
                  ORDER BY id) AS T))
 ORDER BY ID
 
 
 SELECT TOP 页大小 *
 
FROM TestTable
 WHERE (ID >
 
          (SELECT MAX(id)
          FROM (SELECT TOP 页大小*页数 id
                  FROM 表
                  ORDER BY id) AS T))
 ORDER BY ID

 
分享到:
评论

相关推荐

    sql实现分页查询的各种方法比较

    本文将深入探讨SQL实现分页查询的各种方法,并比较它们的性能差异。 ### SQL实现分页查询的方法 #### 方法一:使用`NOT IN`子句 在SQL Server 2000/2005版本中,一种常见的分页查询实现方式是通过`NOT IN`子句。...

    LINQ To SQL实现分页效果源码

    3. **添加分页**:为了实现分页,我们需要使用`Skip()`和`Take()`方法。`Skip(n)`用于跳过前n条记录,`Take(m)`用于获取之后的m条记录。比如,如果你想获取第10页,每页显示10条记录,你可以这样做: ```csharp ...

    三种数据库SQL分页方法详解

    ### 三种数据库SQL分页方法详解 在数据库查询过程中,分页是非常常见且重要的一个功能。它可以帮助我们更高效地处理大量数据,特别是在构建大型应用系统时,分页技术能够显著提升用户体验。本文将详细介绍三种...

    mybatis中进行sqlserver分页

    mybatis中,sqlserver分页

    Oracle,SQl,MySql实现分页查询

    本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server(这里用SQL代替)、MySQL中的实现方式,并对它们的性能进行对比分析。 #### 分页方案一:利用Not In和SELECT TOP分页 **基本...

    SQL分页语句的三种方法的比较

    SQL提供了多种实现分页的方法,本文将详细介绍并比较三种常用的SQL分页技术:利用Not In和SELECT TOP分页、利用ID大于多少和SELECT TOP分页、以及利用SQL的游标存储过程分页。 #### 1. 利用Not In和SELECT TOP分页 ...

    Oracle 3种分页SQL方法比较

    本文将详细探讨三种常用的Oracle分页SQL方法:ROWNUM、ROWNUM结合子查询以及新引入的Oracle 12c的FETCH NEXT WITH OFFSET语法。这三种方法各有优缺点,适用于不同的场景。 1. ROWNUM方法: ROWNUM是Oracle中最基础...

    sqlserver分页器

    简易的sqlserver分页功能,只需要将页码传入即可...3、传入mybitis中 在sql语句头部调用 ${pading.begin} 结尾调用 ${pading.end}即可实现分页 4、默认每页10条 若需要更改 则修改该类源码中 的成员变量即可(有注释)

    sql server 分页大全

    在SQL Server 2000中,由于没有内置的`OFFSET`和`FETCH`功能,我们可以使用`ROW_NUMBER()`函数配合`WHERE`子句来实现分页。首先,为每一行分配一个唯一的行号,然后根据这个行号进行筛选: ```sql WITH PagedData ...

    sql分页技术(三种方法)

    本文将详细介绍三种在SQL中实现分页的技术,帮助读者更好地理解和掌握这一实用技巧。 ### 第一种方法:使用NOT IN与TOP结合 这种方法的基本思路是首先从表中选择出一定数量的记录(比如前20条),然后在剩余的记录...

    LinQ TO SQL 实现分页功能

    在LINQ to SQL中,可以使用Skip和Take方法实现分页。Skip用于跳过指定数量的记录,Take用于获取指定数量的记录。 3. **Visual Studio 2008**: VS2008是微软的集成开发环境,它提供了对LINQ的支持,包括LINQ to SQL...

    在SQL Server中通过SQL语句实现分页查询

    ### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...

    sql server分页技术(SQL Server 与Access数据库相关分页技术)

    通过配合`OVER`子句和`BETWEEN`操作符,可以轻松实现分页。这种方法高效且灵活,支持任意排序,成为SQL Server分页的首选方法。 在实际应用中,应根据数据量、查询复杂度和性能需求选择合适的分页策略。在优化分页...

    使用SQL语句实现通用分页查询

    使用SQL语句实现通用分页查询,支持模糊查询等。

    三种数据库利用SQL语句进行高效果分页

    以上介绍了三种数据库(SQL Server、Access、Oracle)中实现分页查询的方法。每种数据库都有其特点,选择合适的方法可以显著提升查询性能。在实际应用中,应根据具体需求和数据库特性灵活选择合适的分页策略。

    数据库分页SQL语句实现

    本文将详细介绍三种主流数据库(SQL Server、MySQL和Oracle)中的分页SQL语句实现方法。 #### SQL Server 的分页SQL语句实现 SQL Server 支持通过`TOP`关键字来实现分页查询。具体实现方式如下: 1. **查询第M页...

    关于SQL 数据分页

    在实际应用中,更常见的是使用`OFFSET`和`FETCH NEXT`(在SQL Server 2012及更高版本中)或者`LIMIT`和`OFFSET`(在MySQL等系统中)来实现分页,这些方法通常更有效率,尤其是当配合索引使用时。 为了优化性能,应...

    SQL server 分页查询

    在SQL Server中,实现分页查询有多种方法,包括使用`ROW_NUMBER()`函数、`OFFSET`关键字以及传统的子查询方式等。 ### 使用`ROW_NUMBER()`函数进行分页 `ROW_NUMBER()`函数是在SQL Server 2005中引入的一个窗口...

Global site tag (gtag.js) - Google Analytics