Usage of OFFSET FETCH in SQL SERVER

298 阅读1分钟

OFFSET FETCH

说明

OFFSET FETCH用于实现数据分页。它是ORDER BY子句的可选部分。如果对它不熟悉,可能我们平时只写到ORDER BY子句就结束了;其实ORDER BY 后面是可以使用OFFSET FETCH的。注意,OFFSET FETCH这是从SQL SERVER 2012开始以后才有的,也就说之前的版本没有这个语法功能。

语法

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

解释

ORDER BY column_list [ASC| DESC]
这就是平时写的普普通通的排序条件子句而已。

OFFSET offset_row_count {ROW | ROWS}
紧跟在ORDER BY排序子句的后面,代表偏移量,offset_row_count是偏移值。翻译成中文就是:偏移 offset_row_count 行数据。至于ROW还是ROWS,没有任何区别。

FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLY
这句话翻译成中文:获得后面的 fetch_row_count 行数据。至于FIRST还是NEXT、ROW还是ROWS,没有任何区别。

整个句子翻译成中文的意思是:以 column_list 字段为排序字段,按照ASC正序[或者DESC倒序]的方式对查询数据排序;然后偏移跳过 offest_row_count 行数据;之后再来获取 fetch_row_count 行数据。

例子

SELECT * FROM table_name ORDER BY ID DESC OFFSET 100 ROWS FETCH NEXT 20 ROWS ONLY;

备注

SQL SERVER 2012以后的版本才出现这种用法,需要注意。

参考

Usage of OFFSET FETCH in SQL SERVER