OFFSET FETCH NEXT知识点整合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于OFFSET FETCH NEXT知识点整合的主要内容,如果未能解决你的问题,请参考以下文章

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

SqlException: ‘OFFSET‘ 附近有语法错误。在 FETCH 语句中选项 NEXT 的用法无效。

'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。

PHP PDO fetch() 详解

SQL Server 2005相当于OFFSET / FETCH [重复]

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