SQL Server была реализована OFFSET
и FETCH
положения в рамках ORDER BY
пункта, как указано на другие ответы и задокументированы в их документации.
Стандарт SQL, с другой стороны, имеет оба этих пункта как независимые:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Если кто-то хочет, чтобы эта функция была реализована в полном соответствии со стандартом, он всегда может сделать запрос в группу SQL Server через канал Connect. Фактически, MS прокомментировала - в другом запросе о смещении и выборке:
Подключить элемент: SQL Denali: добавить счетчик строк в SELECT
оператор - Алексей Рохин
Ответ: Опубликовано Microsoft 24/11/2010 в 11:34
Требование, которое OFFSET/FETCH
требует, ORDER BY
является ограничением в этом выпуске. В стандарте ANSI SQL (SQL: 2011), где предлагаются новые OFFSET/FETCH
предложения, ORDER BY
необязательно. Ограничение в SQL Server связано с ограничением в нашей технологии синтаксического анализа, которая не может обрабатывать необязательный синтаксис без создания OFFSET
зарезервированного ключевого слова. Мы можем удалить это в будущем.
Теперь что касается ...
До тех пор, если кто-то хочет использовать OFFSET
и FETCH
без конкретного ORDER BY
, обходной путь должен добавить порядок «ничего не делать» по предложению. Пример:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;