Предложение OFFSET FETCH (SQL Server Compact)
Предложение OFFSET-FETCH предоставляет возможность выбирать из результирующего набора только такой объем данных, который требуется для заполнения окна или страницы. Предложение OFFSET-FETCH может использоваться только вместе с предложением ORDER BY.
Синтаксис
[ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n][<offset_fetch>] ]
<offset_fetch> ::= {OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } [FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY]}
Аргументы
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
Задает количество строк, которые нужно пропустить, прежде чем начать возвращать строки из выражения запроса. Аргументом предложения OFFSET может быть целое число или выражение, которое больше нуля или равно нулю. ROW и ROWS можно использовать попеременно.FETCH { FIRST|NEXT } <выражение подсчета строк> { ROW|ROWS } ONLY
Задает количество строк, которые нужно вернуть, после обработки предложения OFFSET. Аргументом предложения FETCH может быть целое число или выражение, которое больше единицы или равно единице. ROW и ROWS можно использовать попеременно. Аналогично FIRST и NEXT можно использовать попеременно.
Ограничения при использовании OFFSET-FETCH
Для использования предложения OFFSET и FETCH требуется ORDER BY.
С FETCH нужно обязательно использовать предложение OFFSET. Нельзя использовать ORDER BY … FETCH.
TOP нельзя объединять с OFFSET и FETCH в одном и том же выражении запроса.
Выражение подсчета строк OFFSET/FETCH может быть арифметическим, константным или выражением с параметрами, которое возвращает целое значение. Выражение подсчета строк не поддерживает скалярные вложенные запросы.
Пример
В следующем примере показано применение предложения OFFSET-FETCH с ORDER BY.
Пример 1. Пропуск первых 10 строк из отсортированного результирующего набора и возврат оставшихся строк.
SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS;
Пример 2. Пропуск первых 10 строк из отсортированного результирующего набора и возврат следующих 5 строк.
SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;