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

SQL Server 2005分页的3中方法

1 
阅读更多
SQL Server 2005引入的新方法。

SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY keyField DESC) AS rowNum, * FROM tableName) AS t WHERE rowNum > start AND rowNum <= end

其中:

keyField为表tableName的一个字段(最好是主键);
tableName为查询的表名;
DESC可以按需换为ASC;
start为要取的结果集的起始记录
end为要取的结果集的结尾记录,可由:(start + pageSize)计算得出。

====================================================================

SQL Server的一般方法。

建立表:

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的游标存储过程分页) 效率最差,但是最为通用

在实际情况中,要具体分析。
分享到:
评论

相关推荐

    SQL Server2005分页查询

    以下将详细讲解SQL Server 2005中分页查询的常用方法。 1. 使用`ROW_NUMBER()`函数: `ROW_NUMBER()`是SQL Server 2005引入的新功能,可以为查询结果集中的每一行赋予一个唯一的行号。在分页查询中,通常结合`TOP`...

    sql Server 通用分页存储过程

    sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程

    mybatis中进行sqlserver分页

    mybatis中,sqlserver分页

    sqlserver2005分页函数

    一个非常好的sql2005分页函数,简单实用,希望对你有所帮助

    sql server 2008通用分页

    SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。

    struts+hibernate+sql server2005分页的小项目

    本项目以"Struts+Hibernate+SQL Server 2005"的技术栈实现了一个简单的分页小项目,下面我们将详细探讨这个项目中的关键技术点。 **1. Struts框架** Struts是Apache组织下的一个开源MVC框架,主要用于构建Java Web...

    Sql Server 通用分页存储过程(适用与 BootStrap Table)

    通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

    java 连接sqlserver数据库查询,并分页显示

    在Java编程中,连接SQL Server数据库并执行查询是常见的任务,尤其当涉及到大量数据时,分页显示就显得尤为重要。本篇文章将详细讲解如何使用Java连接SQL Server数据库,执行查询语句以及实现分页显示。 首先,我们...

    ASP.NET基于SQLServer的分页

    3. **SQL Server分页查询** - `TOP`子句:在SQL Server中,可以使用`TOP`子句配合`ORDER BY`来实现分页。例如,获取第一页的数据,可以写成`SELECT TOP pageSize * FROM table ORDER BY sortField DESC`。 - `...

    SqlServer数据库分页

    这篇博客将探讨SQL Server中实现分页的方法。 在SQL Server中,有两种主要的分页方法:`TOP`和`OFFSET-FETCH`,以及`ROW_NUMBER()`函数配合`WHERE`子句。 1. **TOP 和 OFFSET-FETCH**: - `TOP`关键字用于获取...

    sqlserver+group by分组查询分页存储过程

    在SQL Server中,分页可以通过多种方法实现,其中一种常见方法是使用`TOP`关键字结合`OFFSET`。然而,在较旧的SQL Server版本中,可能需要更复杂的查询结构,如在给定的代码示例中所示,使用了动态SQL和变量来构建...

    Microsoft SQL Server 2005技术内幕:存储引擎(中文).pdf

    第3章 SQL Server 2005的配置  3.1 使用SQL Server 配置管理器  配置网络协议  默认的网络配置  管理服务  3.2 系统配置  任务管理  资源分配  系统分页文件的位置  非必需的服务  网络协议  ...

    Hibernate+sqlserver2000分页

    综上所述,`Hibernate+sqlserver2000分页`是一个结合了ORM框架和数据库分页策略的技术主题。在实际应用中,开发者需要根据业务需求选择合适的分页方法,并注意性能优化,如避免全表扫描,使用索引来加速查询等。理解...

    sqlserver分页查询语句

    sqlserver分页查询语句;sqlserver分页查询语句;sqlserver分页查询语句;

    SQLServer分页.rar

    本资源"SQLServer分页.rar"包含了一个名为"SQL分页.txt"的文件,里面详细讲解了SQL Server中的分页实现方法。 首先,我们来理解SQL Server分页的基本概念。分页通常涉及到两个关键参数:`OFFSET`和`FETCH NEXT`。`...

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

    这种方法高效且灵活,支持任意排序,成为SQL Server分页的首选方法。 在实际应用中,应根据数据量、查询复杂度和性能需求选择合适的分页策略。在优化分页性能时,还可以考虑使用索引、缓存等手段。对于大数据量的...

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

    针对这一需求,本文将详细介绍如何在SQL Server中实现有效的分页查询。 ### 方法1:使用NOT IN 这种方法通过先选择前300100条记录的序列号(这里假设`fldserialNo`是唯一标识每一行的字段),然后在外层查询中排除...

    java语言的分页查询功能(mysql和sql server)

    本教程将详细讲解如何在Java中实现不分框架的分页查询,同时涵盖对MySQL和SQL Server数据库的支持。 一、基础知识 1. 分页概念:分页是将大量数据按一定数量分成若干部分,每次只加载一部分到内存中显示,用户可以...

    vc+sqlserver2005分页模块实现

    本教程将深入探讨如何在VC++(Microsoft Visual C++)环境中,结合SQL Server 2005数据库,实现高效的分页查询功能。这有助于提高用户体验,减少网络负载,同时确保数据的有序、稳定显示。 首先,理解分页的概念。...

Global site tag (gtag.js) - Google Analytics