SQL Server实现分页方法介绍

一、创建测试表

CREATE TABLE [dbo].[Student](
    [id] [int] NOT NULL,
    [name] [nvarchar](50) NULL,
    [age] [int] NULL)

二、创建测试数据

declare @i int
set @i=1
while(@i<10000)
begin
    insert into Student select @i,left(newid(),7),@i+12
    set @i += 1
end

三、测试

1、使用top关键字

top关键字表示跳过多少条取多少条

declare @pageCount int  --每页条数
declare @pageNo int  --页码
declare @startIndex int --跳过的条数
set @pageCount=10
set @pageNo=3
set @startIndex=(@pageCount*(@pageNo-1))
select top(@pageCount) * from Student
where ID not in
(
  select top (@startIndex) ID from Student order by id
) order by ID

测试结果:

2、使用row_number()函数

declare @pageCount int  --页数
declare @pageNo int  --页码
set @pageCount=10
set @pageNo=3
--写法1:使用between and
select t.row,* from
(
   select ROW_NUMBER() over(order by ID asc) as row,* from Student
) t where t.row between (@pageNo-1)*@pageCount+1 and @pageCount*@pageNo
--写法2:使用 “>”运算符
 select top (@pageCount) * from
(
   select ROW_NUMBER() over(order by ID asc) as row,* from Student
) t where t.row >(@pageNo-1)*@pageCount
--写法3:使用and运算符
select top (@pageCount) * from
(
   select ROW_NUMBER() over(order by ID asc) as row,* from Student
) t where t.row >(@pageNo-1)*@pageCount and t.row<(@pageNo)*@pageCount+1

四、总结

ROW_NUMBER()只支持sql2005及以上版本,top有更好的可移植性,能同时适用于sql2000及以上版本、access。

这篇文章介绍了SQL Server实现分页方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

(0)

相关推荐

  • sql server实现分页的方法实例分析

    本文实例讲述了sql server实现分页的方法.分享给大家供大家参考,具体如下: declare @index int,@num int set @index = 1--当前页 set @num = 2--单页包含的行数 --分页1 select top (@num) * from ppohd where doccode not in ( select top (@num * (@index -1)) doccode from ppohd order by doccode ) order by

  • 五种SQL Server分页存储过程的方法及性能比较

    在SQL Server数据库操作中,我们常常会用到存储过程对实现对查询的数据的分页处理,以方便浏览者的浏览.本文我们总结了五种SQL Server分页存储过程的方法,并对其性能进行了比较,接下来就让我们来一起了解一下这一过程. 创建数据库data_Test : create database data_Test GO use data_Test GO create table tb_TestTable --创建表 ( id int identity(1,1) primary key, userN

  • sqlserver分页查询处理方法小结

    sqlserver2008不支持关键字limit ,所以它的分页sql查询语句将不能用MySQL的方式进行,幸好sqlserver2008提供了top,rownumber等关键字,这样就能通过这几个关键字实现分页. 下面是本人在网上查阅到的几种查询脚本的写法: 几种sqlserver2008高效分页sql查询语句 top方案: sql code: select top 10 * from table1 where id not in(select top 开始的位置 id from table1

  • SQL Server中row_number分页查询的用法详解

    ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号.在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号. ROW_NUMBER() 说明:返回结果集分区内行的序列号,每个分区的第一行从1开始. 语法:ROW_NUMBER () OVER ([ <partition_by_clause> ] <order_by_clause>) . 备注:ORDER

  • 基于sqlserver的四种分页方式总结

    第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId from ArtistModels ) as b where RowId between 10 and 20 ---where RowId BETWEEN 当前页数-1*条数 and 页数*条数--- 执行结果是: 第二种方式:offset fetch next方式(SQL2012以上的版本才支持:推

  • SQL SERVER 2008 中三种分页方法与比较

    建立表: 复制代码 代码如下: 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_

  • SQL Server 在分页获取数据的同时获取到总记录数

    SQL Server 获取数据的总记录数,有两种方式: 1.先分页获取数据,然后再查询一遍数据库获取到总数量 2.使用count(1) over()获取总记录数量 SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn, COUNT(1) OVER() AS TotalCount, Id FROM dbo.T_User )a WHERE a.rn BETWEEN 1 AND 5 第二种方式既分页还能获取到总记录数量.就是多一个字

  • SQL server分页的4种方法示例(很全面)

    这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2页,每页含10条记录. 首先说一下SQL server的分页与MySQL的分页的不同,mysql的分页直接是用limit (pageIndex-1),pageSize就可以完成,但是SQL server 并没有limit关键字,只有类似limit的top关键字.所以分页起来比较麻烦. SQL serve

  • SQLServer存储过程实现单条件分页

    话不多说,请看代码: SQLServer Procedure Pagination_basic: ALTER PROCEDURE [qiancheng].[Pagination_basic] ( @Table_name VARCHAR (255), --name of table @Rows_target VARCHAR (1000) = '*', --search rows @Rows_condition VARCHAR (1000) = '', --the condition to find

  • sqlserver2005使用row_number() over分页的实现方法

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR> 例子: 复制代码 代码如下: select * from ( select *, ROW_NUMBER() OVER(Order by a.CreateTime DESC ) AS RowNumber from table_name as a ) as b where RowNumber BETWEEN 1 and 5 将会返回table表 其中有一列名字为 RowNu

  • 高效的SQLSERVER分页查询(推荐)

    第一种方案.最简单.普通的方法: 复制代码 代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC 平均查询100次所需时间:45s 第二种方案: 复制代码 代码如下: SELECT * FROM ( SELECT TOP 30 * FROM (SELECT TOP 4503

  • SQL Server 分页编号的另一种方式【推荐】

    今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度. sql及相关的结果如下,数据库中的数据有5W+. ROW_NUMBER(): SET STATISTICS TIME ON SELECT ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id FROM dbo.T_MyCourse 运行结果 UNBOUNDED PRECEDING SET STATISTICS TIME ON SELECT SUM(1)

随机推荐