SQL 2012 新特性 offset ,fetch next only
今天调试一个表格数据的数据,用的是 EF 作为ORM,遇到了一个奇怪的事情,点击下一页的时候,显示的数据始终不变,我还以为 分页 代码哪里出问题了。检查了半天发现没有问题。
好吧,没办法,将EF 执行的SQL 语句输出,看到了如下代码。
SELECT [Extent1].[Id] AS [Id], [Extent1].[TrueName] AS [TrueName], [Extent1].[BirthDay] AS [BirthDay], [Extent1].[Age] AS [Age], [Extent1].[Sex] AS [Sex], [Extent1].[Height] AS [Height], [Extent1].[Photo] AS [Photo], [Extent1].[Adress] AS [Adress], [Extent1].[Telephone] AS [Telephone], [Extent1].[Mobilephone] AS [Mobilephone], [Extent1].[WeChat] AS [WeChat], [Extent1].[Qq] AS [Qq], [Extent1].[Email] AS [Email], [Extent1].[AddTime] AS [AddTime], [Extent1].[UpTime] AS [UpTime] FROM [dbo].[Members] AS [Extent1] ORDER BY [Extent1].[AddTime] Desc OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY
注意看最后的一行 OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY 。先声明:本地电脑安装的是SQL2012 。第一眼,好像之前的分页写法不是这样。难道是 SQL2012 的新特性?的确是!!
看字面意思,offset 0 row 意思就是 跳过/偏移 0 行,fetch next 5 rows only 意思就是 接收/取出 接下来的5行数据。 有点 linq 语法的味道。[list].skip(n).take(n);
接下来说下上面查询后没有分页的问题。
先看我们的数据。
时间这一列值是一样的。
上面的SQL 语句我们简化下。
select Id,TrueName,AddTime from Members order by AddTime desc offset 0 rows fetch next 5 rows only
看下查询结果:
再查:
select Id,TrueName,AddTime from Members order by AddTime desc offset 5 rows fetch next 5 rows only
再查:
select Id,TrueName,AddTime from Members order by AddTime desc offset 15 rows fetch next 5 rows only
。。。。。。
呵呵,TM 居然一样! 这是什么情况? 我怎么觉得 在哪里遇到过类似的问题,在access数据库中 查询指定数量,排序的字段值是一样的情况下,查询出来的结果行数 不一定 正确! 这个问题好像是access的已知BUG,但微软貌似不会去修复了,解决方法就是 多加一个值不会相同排序字段,比如自增长列字段。
好了,也用这个方法来试试!
呵呵。。。这算BUG吗??
找万能的GOOGLE 去看看这是神马情况。。。
。。。。。。
好吧,我表示没有找到这是为什么。。。 留待以后解决。。。
已禁用评论。