认识ORDER BY子句的延伸——OFFSET 和 FETCH 子句(SqlServer2012开始)

OFFSET和FETCH子句适用于SQL Server 2012 (11.x)和Azure SQL数据库之后的版本。

先看下实际例子(SqlServer2016中):

 语法:

ORDER BY column_list [ASC |DESC]
[OFFSET offset_row_count {ROW | ROWS}
[FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY]]

  • 这里FIRST与NEXT是同义的,可以互换使用。ROW 和 ROWS 也是同义的,可以互用。
  • offset_row_count:可以是大于或等于0的常量(constant)、变量(variable)或参数(parameter); 
  • fetch_row_count: 可以是大于或等于1的常量(constant)、变量(variable)或标量(scalar)。

注意:

  1. offset和 fetch 仅可以在order by子句后面才能使用,不能与top一起使用,(用“offset 0 fetch next N ROWS ONLY”可以替代“top N”的功能);
  2. fetch是可选项,用于限制返回行数,只能跟在offset后面使用。

用OFFSET 和 FETCH 子句实现分页功能比用ROW_NUMBER()函数做子查询的方式会少耗一些资源,性能更好。

更详细的资料可以参考以下实例教程:

猜你喜欢

转载自blog.csdn.net/carcarrot/article/details/110223487