Предложение 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;