SQLServer常用分页方式
mysql的分页是基于limit关键字,oracle的分页是基于rownum行号,SQLserver的分页在下面进行研究,是基于SQLServer2012进行的测试。
0.原来的SQL的所有数据

下面的测试假设每页都是取5条数据。
1.第一种-ROW_NUMBER() OVER()方式(over函数必须有)
(1)取第一页数据
select * from (
select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]
) as b where RowId between 1 and 5;
结果:

(2)取第二页数据
select * from (
select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]
) as b where RowId between 6 and 10;
结果:

总结: 这种方式采用 RowId BETWEEN 当前页数-1*页大小+1 and 页数*页大小 ,而且包含起始值与结束值。
补充:这种方式的通用写法如下: 原来SQL不能带order by ,但是可以带条件。
原来SQL = select * from [mydb].[dbo].[user] where name like 'name%'
拼接分页的模板如下:
select * from (
select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from (
原来SQL
) AS A
) as B
where RowId between 1 and 5;
2.第二种-offset start fetch next page rows only
(1)取第一页
select * from [mydb].[dbo].[user] order by ID offset 0 rows fetch next 5 rows only;
结果:

(2)取第二页
select * from [mydb].[dbo].[user] order by ID offset 5 rows fetch next 5 rows only;
结果:

总结:这种方式的起始值与结束值计算方式: offset 页号*页大小 rows fetch next 页大小 rows only
3.第三种: top 关键字
(1)取第一页
select top 5 * from [mydb].[dbo].[user]
where ID not in (select top 0 ID from [mydb].[dbo].[user]);
结果:

(2)取第二页
select top 5 * from [mydb].[dbo].[user]
where ID not in (select top 5 ID from [mydb].[dbo].[user]);
结果:

总结:这种方式只用改内层的 top就可以了: 内层的top后面相当于起始值,计算方式为 (页号-1)*页大小。
补充:这种分页方式的通用模板如下: 这个可以加order by和条件
原来SQL = select * from [mydb].[dbo].[user] where name like 'name%'
select top 5 * from (
原来SQL
) AS A where ID not in (select top 5 ID from [mydb].[dbo].[user]);
4. ROW_NUMBER() + top 相当于上面1和3的结合使用
(1)取第一页
select top (5) * from (select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]) as A where A.RowId>0;
结果:

(2)取第二页
select top (5) * from (select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from [mydb].[dbo].[user]) as A where A.RowId>5;
结果:

总结:这种方式比较通用, 第一个 top 里面的值 相当于 页大小,第二个rowID>起始值,起始值计算方式为 (页号-1)*页大小
补充:这种分页方式的通用模板如下: 这种方式原来的SQL也不用加排序语句
原来SQL = select * from [mydb].[dbo].[user] where name like 'name%'
select top (5) * from (
select *, ROW_NUMBER() OVER(Order by ID ) AS RowId from (
原来SQL
) as A
) as B where B.RowId>5;
注意:文中SQLServer的AS A这些起别名不能省略。
SQLServer常用分页方式的更多相关文章
- sqlserver实现分页的几种方式
sqlserver实现分页的几种方式 第一种:使用org.springframework.data.domain.Page来进行分页 package com.cellstrain.icell.repo ...
- sqlserver的四种分页方式
第一种:ROW_NUMBER() OVER()方式 select * from ( select *, ROW_NUMBER() OVER(Order by ArtistId ) AS RowId f ...
- Oracle、MySql、SQLServer数据分页查询
看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...
- iOS代码加密常用加密方式
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- DataGridView 中添加CheckBox和常用处理方式 .
DataGridView 中添加CheckBox和常用处理方式 文章1 转载:http://blog.csdn.net/pinkey1987/article/details/5267934 DataG ...
- Entity Framework后台采用分页方式取数据与AspNetPager控件的使用
本文是一个对AspNetPager控件使用的笔记! 有关AspNetPager控件可以查看杨涛主页.这是一个开放的自定义ASP.NET控件,支持各种自定义的数据分页方式,使用很方便,而且功能也很强大, ...
- [转]几种常见SQL分页方式
创建环境: create table pagetest ( id ,) not null, col01 int null, col02 ) null, col03 datetime null ) -- ...
- PHP+jQuery 长文章分页类 ( 支持 url / ajax 分页方式 )
/* ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8 **** ...
随机推荐
- Vue(基础六)_vue-router
一.前言 本文主要涉及: 1.传统方式路由的实现 2.使用vue-router ...
- qml: QtCharts模块得使用(数据整合和显示) ---- <二>
QtCharts目前已经可以免费使用,而且使用非常方便.快捷,并且提供了各种类别的支持(例如:曲线图,柱形图,折线图,饼图等). 这里讲解qml端图表显示,C++端进行数据整合,并能实现实时数据刷新( ...
- 学习笔记(node.js)
因为做的笔记太多了,所以就直接发到百度云盘了. 第一天:是关于环境的配置,以及简单的练习. 云盘链接地址:链接:https://pan.baidu.com/s/1WLWtyTKWaQ32JpDUCF2 ...
- POJ3662 SPFA//二分 + 双端队列最短路
https://cn.vjudge.net/problem/12427/origin 题意:求1到N第K + 1大条边权最小的路径 首先想到dp递推,dp[x][y]表示到x这个点经过y条免费边的最小 ...
- Windows server 2008 R2远程桌面3389端口号修改
修改 Windows 服务器默认远程端口 https://help.aliyun.com/document_detail/51644.html?spm=5176.doc51644.6.784.4iAH ...
- C++ 文件保存
文件保存: #include <sstream>#include <fstream>using namespace std; /*save to path ./record ...
- C++ cout格式化输出(转)
C++ cout格式化输出(转) 这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等.通过本文,您可以完全脱离scanf/pr ...
- js中的blob,图片base64URL,file之间的关系
js的base64编码和解码 英文是这样的:// atob() 将base64解码 // btoa() 将字符串转码为base64 var str = 'javascript'; window.bto ...
- ubuntu 14.04中安装 ruby on rails 环境
环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 1. bundle install 时,报json错误可以看出是在安装nokogiri时遇到了问题,此时执行 sudo ap ...
- laravel 5.4 fopen(): Filename cannot be empty
1.出错的报错信息(我在用laravel5.4文件上传时候出错的) laravel 5.4 fopen(): Filename cannot be empty 2.解决的方法 在php.ini中修改临 ...