SQL SERVER 2012/ 2014 分页,用 OFFSET,FETCH NEXT改写ROW_NUMBER的用法

写法:

假装有个表Shop,其中有一列ShopName,取100000到100050条数据。

ROW_NUMBER 的写法

SELECT * FROM
(SELECT ShopName , ROW_NUMBER() OVER(ORDER BY ShopName)  as R
FROM Shop) t
WHERE R>100000 AND R<=100050

OFFSET,FETCH 的写法

SELECT ShopName from Shop
ORDER BY ShopName
OFFSET 100000 ROW
FETCH NEXT 50 ROW ONLY

比较:

之所以取十万条以后的数据,能明显看出执行时间上的差异。虽然前人们已经给出过很多论证,我这里还是贴一下比较结果。

先是ROW_NUMBER

再是 OFFSET FETCH  

高下立判,后者既高效又好写易懂有木有!

私人小笔记:

OFFSET=偏移,跳过

FETCH = 取

另外OFFSET可以单独使用,如下,既跳过前十万条:

SELECT ShopName from Shop
ORDER BY ShopName
OFFSET 100000 ROW

题外话:

从 SQL SERVER 2000 那个大家还在写TOP的年代,到2005的ROW_NUMBER,再到2012的OFFSET  FETCH,猿类同胞们真是不跟紧潮流就要被无情的抛下啊~一起加了个油吧~

时间: 2024-10-17 01:48:40

SQL SERVER 2012/ 2014 分页,用 OFFSET,FETCH NEXT改写ROW_NUMBER的用法的相关文章

分享SQL Server 2012/2014内存数据库,AlwaysOn,参考教材与网上总结

Sql Server 2012 高可用性的几种方案的比较,AlwaysOn优势何在 对Sql Server 2012 高可用性与灾难恢复的几种方案的比较,复制,集群,镜像优劣何在,新生技术AlwaysOn的优势又何在,本文将用表格格式做个大致的比较. SQL Server 2014 创建内存优化的数据库 使用内存优化的数据文件组创建数据库,与普通数据库的区别是,要向文件组添加文件,文件类型为FILESTREAM 数据 SQL Server 2014 创建内存优化表 SQL Server 内存中

SQL SERVER 2012/2014 链接到 SQL SERVER 2000的各种坑

本文总结一下SQL SERVER 2012/2014链接到SQL SERVER 2000的各种坑,都是在实际应用中遇到的疑难杂症.可能会有人说怎么还在用SQL SERVER 2000,为什么不升级呢? 每个公司都会有一两个几乎快被人遗忘的系统,接手维护这些系统的人可能都不知换了多少批了.它们的命运注定慢慢消亡.然而偏偏却又生命力顽强,总还有一些人在使用着这些系统.所以就处在一种尴尬的境地: 升级吧,价值不大,可能再过一两年,这系统就要被其它系统替代了.而且项目经理也没有精力.人手耗费在这上面.最

SQL Server 2012 实现分页新语法

最近一直在看SQL Server的书,不过看的都是基础的查询流,查询在工作中用到的最多,所以能正确地查询出想要的数据也是很重要的嘛. 在书上看到在SQL Server 2012新增了一种实现分页的查询方法,感觉比原来的方便一点,因此记录一下,如能帮助到大家,也是非常开心的~ 以前分页的时候,我基本都是用ROW_NUMBER()函数,和在WHERE语句中用BETWEEN AND 来实现的:每次都得写子查询,感觉挺麻烦的,例: SELECT * FROM ( SELECT ID, ROW_NUMBE

SQL Server 2012使用Offset/Fetch Next实现分页

在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows  Fetch Next ... Rows only的方式去实现分页数据查询. select [column1] ,[column2] ... ,[columnN] from [tableName] order by [columnM] offset (pageIndex-1)*pageSize rows fetch next pageSize r

SQL Server 2012 新的分页函数 OFFSET &amp; FETCH NEXT

DECLARE @page INT, @size INT;select @page = 300, @size = 10 SELECT *FROM gpcomp1.GPCUSTWHERE company like 'a%'ORDER BY CUSTNOOFFSET (@page -1) * @size ROWSFETCH NEXT @size ROWS ONLY; SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT,布布扣,bubuko.com

Sql Server 2012 的新分页方法分析(offset and fetch) - 转载

最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的 其中 offset and fetch 最重要的新特性是 用来 分页,既然要分析 分页,就肯定要和之前的分页方式来比较了,特别是 Row_Number() 了,在比较过程中,发现了蛮多,不过最重要的,通过比较本质,得出了优劣,也和大家一起分享下. 准备工作,建立测试表:Article_Detail,主要是用来存放一些

.NET Core EF框架使用SQL server 2008数据库分页问题:Incorrect syntax near &#39;OFFSET&#39;. Invalid usage of the option NEXT in the FETCH statement

一. 问题 最近.Net Core程序部署到服务器,采用EF6.本地数据库是SQL server 2016,服务器数据库安装的是SQL server 2008 R2,在用到分页查询时报错如下: { "Depth": 0, "ClassName": "", "Message": "Incorrect syntax near 'OFFSET'.\r\nInvalid usage of the option NEXT in

[资料分享]SQL Server 2016/2014/2012/2008简体中文企业版下载+对应补丁

为什么只提供企业版下载呢?因为不管你是学生还是工作研究人员,企业版都是功能最为齐全的一个版本,比如企业版都集成了SQL Server Management Studio管理界面(俗称企业管理器的可视化操作界面),在工作学习中,可以避免很多由版本功能引起的不必要的麻烦事,下面就是精心为大家收集的下载地址了. 既有SQL Server各版本下载,也有对应的Service Pack补丁下载. SQL Server 2016简体中文企业版 文件名:cn_sql_server_2016_enterpris

Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题

在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp { [Key] public Guid No { get; set; } public int Age { get; set; } [Required] [StringLength(50)] public string Name { get; set; } } 如果我们进行分页的话,一般使用Skip和Take方法,这里一行最简单的代码如下: mContext.Emp.OrderBy(e