`
Sharpleo
  • 浏览: 575369 次
  • 性别: Icon_minigender_1
  • 来自: newsk
社区版块
存档分类
最新评论

sqlserver 几种常见分页

 
阅读更多
转自CSDN http://topic.csdn.net/u/20100726/10/ac55bccb-7905-4b50-9056-d19e00c79918.html
建立表:
CREATE TABLE [TestTable] (
 [ID] [int] IDENTITY (1, 1) NOT NULL ,
 [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO
 
插入数据:(2万条,用更多的数据测试会明显一些)
SET IDENTITY_INSERT TestTable ON
declare @i int
set @i=1
while @i<=20000
begin
    insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
    set @i=@i+1
end
SET IDENTITY_INSERT TestTable OFF
 
-------------------------------------
分页方案一:(利用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
-------------------------------------
分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
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的游标存储过程分页)
create  procedure XiaoZhengGe
@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/@pagesize) as 总页数--,@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 
        (
        SELECT ROW_NUMBER() OVER (ORDER BY tid) AS RowNumber,* FROM tenderInfo
        ) A
WHERE RowNumber > 10*(2-1) 




SELECT TOP 20 *
FROM tenderInfo
WHERE (tid >
          (SELECT isnull(MAX(tid),0) --如果max为null那么就为0,主要是应对第一页
         FROM (SELECT TOP (20*1) tid --页大小*页数 id
                 FROM tenderInfo
                 ORDER BY tid) AS T))
ORDER BY tid
分享到:
评论

相关推荐

    关于SQL Server SQL语句查询分页数据的解决方案

    另一种常见的分页查询方法是使用`TOP`和`ORDER BY`组合。这种方式适用于那些需要按特定顺序排列记录的情况。例如,从表`Sys_option`(主键为`sys_id`)中从第10条记录开始检索20条记录,可以使用以下SQL语句: ```...

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

    以下是几种常用的SQL Server分页技术: 1. **TOP 和 NOT IN** 分页: 这种方法通过`TOP`关键字选取指定数量的记录,然后使用`NOT IN`子句排除已选取的记录。例如,查询第二页的记录,可以先选取前`@RecordStart`个...

    几种数据库常见分页sql

    以上就是 SQL Server、Oracle 和 MySQL 三种数据库中常见的分页查询方法。不同的数据库有不同的语法特点,但核心思想都是通过限制返回结果的数量来实现分页功能。开发者可以根据实际项目需求及所使用的数据库类型来...

    几条常见的数据库分页SQL 语句

    几条常见的数据库分页SQL 语句,针对oracle,sqlserver,mysql三种常见数据库的分页显示。

    Sql server 分页存储过程的性能对比

    这些方法各有优劣,具体到存储过程,我们可以比较以下几种常见策略: 1. **ROW_NUMBER() 函数**: 使用`ROW_NUMBER()`窗口函数可以为结果集中的每一行分配一个唯一的行号,结合`OFFSET`和`FETCH NEXT`语句实现分页...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    本文将详细介绍Oracle、MySQL、SQL Server等常见数据库系统的分页方法。 ### MySQL分页方法 #### 1. 使用`LIMIT`子句 MySQL提供了`LIMIT`子句来实现分页查询。该子句可以接受两个参数:第一个参数为起始行号...

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

    在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致页面响应速度慢,还可能因为数据量过大而消耗过多内存资源。因此,...

    Sql Server 各种数据分页

    以下是对SQL Server中几种常见数据分页方法的详细解释: 1. **定位法**: 这种方法利用了主键ID的顺序性,通过找出目标范围前一个ID的最大值,然后筛选出大于这个ID的记录。例如,要获取ID为3000001到3000010之间...

    SQL Server 分页方案比拼

    本文将深入探讨SQL Server中几种常见的分页方案,并对它们进行比较分析。 ### 1. 基于子查询的分页方法 一种常用的分页策略是通过子查询来实现。具体做法是在外层查询中使用`TOP`关键字选取一定数量的记录,而在内...

    swt sqlserver分页组件

    在SWT中实现SQLServer分页组件,我们需要考虑以下几个关键知识点: 1. ** SWT 表格(Table)控件**:这是SWT中用于显示行数据的基础控件。我们可以使用`TableViewer`类来操作表格,添加列、填充数据以及设置各种...

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    本文将深入探讨标题和描述中提到的“com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作”这一异常,以及如何在使用Hibernate、Struts进行分页时避免这一问题。我们将从异常的根本原因...

    详解SQLServer和Oracle的分页查询

    本篇文章将详细介绍SQL Server和Oracle两种数据库系统的分页查询方法。 首先,理解分页的基本概念至关重要。分页涉及到几个关键参数:每页记录数(pageSize),当前页数(pageNow),总记录数(totalRecords),总...

    SQL Server 2005分页显示存储过程

    SQL Server 2005 提供了多种方法来实现分页查询,本文将详细介绍几种典型的分页显示存储过程,并比较它们之间的执行效率。 #### 核心知识点 ##### 1. 使用 `SELECT TOP` 和 `NOT IN` 实现分页 这种方法是通过先...

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

    下面介绍几种常见的方法: ##### 方法一:使用 `ROWNUM` ```sql DECLARE @PageSize INT = 10; DECLARE @CurrentPage INT = 1; SELECT * FROM components WHERE ROWNUM NOT IN ( SELECT ROWNUM FROM components ...

    常见的几种分页语句和方法

    ### 常见的几种分页语句和方法 在软件开发中,特别是Web应用程序中,数据分页是一项非常重要的技术。它可以帮助我们更高效地处理大量数据,并提高用户体验。本文将详细介绍几种常用的分页方法,包括SQL语句分页、...

    关于SQL 数据分页

    在SQL中,数据分页是一种常见的技术,用于在大量数据中分批次地显示结果,以提高用户界面的可读性和性能。在这个例子中,作者针对一个包含20万条记录和69个字段的`TORDER`表,设计了一种分页方法,主要基于`...

    sql分页查询几种写法

    以下将详细介绍几种常见的SQL分页查询方法。 1. **Not In / Top 方法** 这种方法通过`NOT IN`子查询配合`TOP`来实现分页。首先,获取需要排除的前n条记录,然后在主查询中排除这些记录,从而得到分页后的结果。...

    sqlserver分页的存储过程

    在SQL Server中,分页查询是一项非常常见的任务,特别是在构建数据量庞大的Web应用程序时,为了提高用户体验,通常需要将大量数据分成多个小页面进行显示。本篇将详细讲解如何使用存储过程实现SQL Server的分页功能...

    真正高效的SQLSERVER分页查询(多种方案)

    在SQL Server中,分页查询是常见的需求,尤其是在大数据量的场景下。然而,SQL Server在处理分页查询时效率并不高,这通常会导致性能问题。本文将探讨几种不同的分页查询方法,并通过实际测试来比较它们的效率,以找...

    SQL server分页

    使用SQL Server进行分页时,还需要注意以下几点以优化性能: 1. **索引选择**:确保使用的排序字段(如`DeleteTime`)上有合适的索引,以提高查询效率。 2. **避免全表扫描**:如果可能的话,尽量避免使用`COUNT(*)...

Global site tag (gtag.js) - Google Analytics