Sql 2012 OFFSET / FETCH NEXT BUG

上个星期,测试发现了一个分页的bug--- 无论怎么分页数据的一样。我们所有的分页都是用EF 分页,为什么只有一个模块的分页有问题呢?

后来跟了下sql语句,发现用到是sql2012的新分页方式 OFFSET/FETCH NEXT。

下面有两段sql语句 ,

DECLARE   @FetchRows tinyint = 8;
SELECT * FROM BnC_Store ORDER BY Created_Date ASC     OFFSET 0 ROWS     FETCH NEXT @FetchRows ROWS ONLY;
SELECT * FROM BnC_Store ORDER BY Created_Date ASC     OFFSET 8 ROWS     FETCH NEXT @FetchRows ROWS ONLY;
SELECT * FROM BnC_Store ORDER BY Created_Date ASC     OFFSET 16 ROWS    FETCH NEXT @FetchRows ROWS ONLY;

  

select * from BnC_Store order by Created_Date asc OFFSET 0 ROWS FETCH NEXT 8 ROWS ONLY;
select * from BnC_Store order by Created_Date asc OFFSET 8 ROWS FETCH NEXT 8 ROWS ONLY;
select * from BnC_Store order by Created_Date asc OFFSET 16 ROWS FETCH NEXT 8 ROWS ONLY;

  

如果数据中Create_Date 的值都一样,可以发现得出的结果是不一样。

如果我们换成 order by ID ,两边的结果是一致的。

所有我个人认为这算是微软 sql2012 的bug

时间: 2024-11-13 20:13:22

Sql 2012 OFFSET / FETCH NEXT BUG的相关文章

SQL Server ->> OFFSET & FETCH子句

SQL Server 2012引入OFFSET + FETCH字句.它俩出现在SELECT .... ORDER BY ...后面.作用是告诉SQL Server在结果集中忽略前N行然后取前M行出来. 比如 SELECT NUM FROM dbo.Numbers ORDER BY Num OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLY 主要要观察下性能如何,执行计划.实际行数为105.没有出现不必要的行扫描.

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 & 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

SqlServer 2012 OFFSET 和 FETCH 子句实现分页

SQLserver 202 新增加的功能,在ORDER BY 子句中新增 OFFSET 和 FETCH 子句,可以实现分页查询效果. ORDER BY 子句中的语法如下:(参考:ORDER BY 子句 (Transact-SQL)) ORDER BY order_by_expression [ COLLATE collation_name ] [ ASC | DESC ] [ ,...n ] [ <offset_fetch> ] <offset_fetch> ::= { OFFSE

SQL2012分页offset fetch 比较SQL2005/2008的ROW_Number

SQL2005/2008的Row_Number http://www.cnblogs.com/Snowfun/archive/2011/10/10/2205772.html 1.OFFSET和FETCH:这两个关键字在MSDN原型使用方式如代码1所示 OFFSET使用起来很简单,首先在OFFSET之后指定从哪条记录开始取.其中,取值的数可以是常量也可以是变量或者表达式.然后通过FETCH关键字指定取多少条记录.其中,FIRST和NEXT是同义词,和前面的ROW和ROWS一样,它们可以互相替换.同

[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例

这是我的文章备份,原始出处:[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例 http://www.dotblogs.com.tw/mis2000lab/archive/2015/04/10/sql_querying_paging_offset-fetch.aspx 这篇文章源自微软出版社(Microsoft Press) 2015年的新书 -- T-SQL Querying Published 3/6/2015 1st Edition 864 pages Book

基于Windows Server 2012 R2部署SQL 2012的AlwaysOn群集

SQL Server2012中新增的AlwaysOn简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移集群.都有其自身的局限性.而AlwaysOn作为微软新退出的解决方案,提取了数据库镜像和故障转移集群的优点.本文旨在通过实现一个AlwaysOn的实例来展现AlwaysOn. Windows2012群集要求作为群集运行的所有节点都必须采用投票算法确定该

SQL 2012 镜像 图解(解决1418)

原文:SQL 2012 镜像 图解(解决1418) 1.环境准备 1.WIN7+SQL 2012 两台机器 如:10.58.8.114  登陆账号 TestB  10.58.8.96  登陆账号 TestA 2.新建两个数据库实例: 如: 10.58.8.114       实例名 TestB     10.58.8.96  实例名 TestA 3.两台机器创建相同的 登陆账号和密码,并将其加入到管理员权限  (解决 错误1418) 4.设置 SQL SERVER 服务登陆账号为当前管理员账号(

SQL 2012的分页

今天看到一篇文章介绍2012中的分页,就想测试一下新的分页方法比原先的有多少性能的提升,下面是我的测试过程(2012的分页语法这里不在做多的说明,MSDN上一搜就有): 首先我们来构造测试数据: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 --建表 CREATE TABLE [dbo].[MyCustomer](     [id] [int] PRIMARY