`
vv_1024
  • 浏览: 110525 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

SQL Server 存储过程的分页

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

在实际情况中,要具体分析。
分享到:
评论
1 楼 fulianglove 2008-05-26  
转至
http://blog.csdn.net/fulianglove/archive/2008/05/26/2482112.aspx
谢谢!

相关推荐

    sql Server 通用分页存储过程

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

    sqlserver 存储过程分页

    sqlserver 存储过程分页

    SQLSERVER存储过程分页

    "SQLSERVER存储过程分页"这个主题主要涉及如何利用存储过程来实现数据库查询结果的分页显示。在大数据量的场景下,分页查询对于提高用户体验和服务器性能至关重要。 分页查询的基本思想是限制每次从数据库中检索的...

    sqlserver 存储过程分页(支持千万级)算法研究

    sqlserver 存储过程分页(支持千万级)算法研究

    C#+Sql Server 存储过程分页代码

    在这个主题“C#+Sql Server 存储过程分页代码”中,我们将深入探讨如何利用存储过程进行数据分页,并通过C#代码实现调用。 分页是Web应用程序中常见的功能,它允许用户逐步浏览大量数据,而不会一次性加载所有记录...

    sql分页 sqlserver中存储过程分页

    想在存储过程中分页的朋友可以使用, sqlserver存储过程万能分页

    sql server 通用分页存储过程

    1.查询返回的表、列名以及排序列没有写死,可以根据需要将这些放到存储过程的输入参数中; 2.适用于所有需要分页的单表或多表联合查询。

    Sql Server存储过程分页(T-SQL)

    通过表名,主键,页码数,每页显示的条数,等输入的参数,返回正确的结果集,返回数据总条数,和总页数。要特别注意@strwhere正确的参数

    sql server 2008通用分页

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

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

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

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

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

    在VB6.0中调用SQL Server的存储过程.pdf

    在VB6.0中调用SQL Server的存储过程是VB开发者经常遇到的问题,本文将详细介绍如何在VB6.0中调用SQL Server的存储过程,并对存储过程的优点和使用方法进行了详细的解释。 首先,存储过程是一种封装方法,用于重复...

    最简单的SQL Server数据库存储过程分页

    1.只需要提供Sql语句和每页的记录数,页数就可以了 2,速度超快哟,100W记录1~3秒就分出来了 3,对于存储过程特别好用

    SQL高效存储过程分页

    当我们谈论“SQL高效存储过程分页”时,我们主要关注如何利用存储过程来实现数据库查询的分页效果,这在大数据量的场景下尤为重要,因为直接查询所有数据可能会导致性能下降,甚至阻塞数据库服务。 分页是Web应用...

    千万级数据分页查询存储过程SQLServer

    本文将深入探讨如何利用SQL Server的存储过程实现高效的大数据分页查询。 首先,理解分页查询的基本概念。分页查询是指从海量数据中按指定的页码和每页大小获取数据,通常用于网页展示或报表生成。在SQL Server中,...

    ASP+SQL Server带条件查询的分页存储过程及其ASP调用实例

    3. ASP可以用于调用SQL Server存储过程实现数据的插入、更新和查询。 4. 使用参数化的存储过程可以提高数据库的安全性和性能。 5. 使用SQL Server的存储过程可以简化数据库操作和提高开发效率。 详细知识点 知识点...

    SQLSERVER高效率分页存储

    SQLSERVER高效率分页存储过程,数据量在2千万下查询分页只需要1-2秒,优化良好....

    通用的存储过程sql分页查询语句

    总结,通用的存储过程SQL分页查询语句是数据库开发中的重要工具,它结合了存储过程的复用性和SQL的灵活性,可以高效地处理大数据量的分页查询。通过选择适当的分页方法和优化策略,我们可以进一步提升查询性能,提供...

    sqlserver 存储过程分页(按多条件排序)

    总结一下,这个例子展示了如何在SQL Server中通过存储过程实现分页查询,并且支持多条件排序。这个方法允许在服务器端高效地处理大量数据,减少了客户端的负担,并且提供了灵活的排序选项,可以根据业务需求进行调整...

    SQL Server调用分页存储过程

    sql server数据库中分页的存储过程,参数中比较灵活,如果首页传1,非首页传其他。

Global site tag (gtag.js) - Google Analytics