OFFSET FETCH NEXT知识点整合

part1:

此语句属于Transact-SQL语言(SQL Server等适用的数据库语言)

OFFSET=偏移,跳过

FETCH = 取

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

SELECT ShopName from Shop  ORDER BY ShopName   OFFSET 100000 ROW

假装有个表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

(此部分摘自http://www.ithao123.cn/content-4319840.html)

part2:

注意事项:使用 OFFSET和 FETCH 限制返回的行数

建议您使用 OFFSET 和 FETCH 子句而不是 TOP子句实现查询分页解决方案,并限制发送到客户端应用程序的行数。

如果将 OFFSET 和 FETCH作为分页解决方案,则需要为返回到客户端应用程序的每“页”数据运行一次查询。例如,要以 10 行为增量返回查询结果,您必须执行一次查询以返回 1-10行,然后再次运行查询以返回 11- 20行,依此类推。每个查询都是独立的,不会以任何方式与其他查询相关联。这意味着,与使用执行一次查询并在服务器上保持状态的游标不同,将由客户端应用程序负责跟踪状态。若要使用 OFFSET和 FETCH 在查询请求之间获得稳定的结果,必须满足以下条件:

1.      查询使用的基础数据不能发生变化。即,不会更新查询处理的行,也不会在单个事务中使用快照或可序列化事务隔离执行查询中的所有页面请求。

有关这些事务隔离级别的详细信息,请参阅SET TRANSACTIONISOLATION LEVEL (Transact-SQL) : http://msdn.microsoft.com/zh-cn/library/ms173763.aspx

2.      ORDER BY 子句包含保证是唯一的列或列组合。

更多内容参考 :http://msdn.microsoft.com/zh-cn/library/ms188385(v=sql.110).aspx

时间: 2024-08-29 14:16:15

OFFSET FETCH NEXT知识点整合的相关文章

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 -&gt;&gt; OFFSET &amp; 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 &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

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一样,它们可以互相替换.同

20150225 IMX257 设备驱动模型之sysfs文件系统知识点整合(二)

20150225 IMX257 设备驱动模型之sysfs文件系统知识点整合(二) 2012-02-25 李海沿 前天我们实现了一个简单的sysfs的kobject的驱动程序,可是有没有发现很多东西都不懂,原因就是在我们对sysfs和kobject的工作原理不懂,虽然我一直不提倡整天接触那些乏味的知识点,也一直不喜欢谈论太多的知识点,但是有的时候,理论知识是实践的基础,有些基础的知识点还是不得不提,下面进入正题. 一.sysfs介绍 在linux2.6内核以后,引入了一个新的文件系统sysfs,它

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 RO

sqlserver-order by offset fetch

若要使用 OFFSET 和 FETCH 在查询请求之间获得稳定的结果,必须满足以下条件: 查询使用的基础数据不能发生变化. 即,不会更新查询处理的行,也不会在单个事务中使用快照或可序列化事务隔离执行查询中的所有页面请求. ORDER BY 子句包含保证是唯一的列或列组合. 特别注意,使用offset fetch时必须排序,且该排序必须能确定所有行的顺序(即 ORDER BY 子句必须包含保证是唯一的列或列组合) 原文地址:https://www.cnblogs.com/LaughAtSelfsW

HTML基础第二天知识点整合

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 2 "http://www.w3.org/TR/xhtml1/TDT/xhtml1-strit.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8&q

Hibernate 面试中最常考察的知识点整合

对于Hibernate,面试官最想知道的无非是以下总结这这十多个问题,每个问题都有详细的答案,如果都完全掌握以下的这些问题,那面试时问及Hibernate你还用怕什么呢?让自信伴随着你第一次冲刺吧! 一.简述 Hibernate 和 JDBC 的区别.优缺点? JDBC与Hibernate在性能上相比,JDBC灵活性有优势.而Hibernate在易学性,易用性上有些优势.当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势. 相同点:◆两者都是JAVA的数据库操作中间件. ◆两者对于数据