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)。
注意:
- offset和 fetch 仅可以在order by子句后面才能使用,不能与top一起使用,(用“offset 0 fetch next N ROWS ONLY”可以替代“top N”的功能);
- fetch是可选项,用于限制返回行数,只能跟在offset后面使用。
用OFFSET 和 FETCH 子句实现分页功能比用ROW_NUMBER()函数做子查询的方式会少耗一些资源,性能更好。
更详细的资料可以参考以下实例教程: