SQL Server hat die Klauseln OFFSET
und FETCH
als Teil der ORDER BY
Klausel implementiert , wie in den anderen Antworten angegeben und in ihrer Dokumentation dokumentiert.
Der SQL-Standard auf der anderen Seite hat beide Klauseln als unabhängig:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Wenn jemand möchte, dass diese Funktion in voller Übereinstimmung mit dem Standard implementiert wird, kann er jederzeit über den Connect-Kanal eine Anfrage an das SQL Server-Team senden. In der Tat hat MS kommentiert - in einer anderen Anfrage über Offset und Fetch:
Verbindungselement: SQL Denali:SELECT
Fügen Sie der Anweisung einen Gesamtzeilenzähler hinzu - von Alexey Rokhin
Antwort: Gepostet von Microsoft am 24/11/2010 um 11:34
Die Forderung , die OFFSET/FETCH
erfordert ORDER BY
ist eine Einschränkung in dieser Pressemitteilung. Im ANSI SQL-Standard (SQL: 2011), in dem die neuen OFFSET/FETCH
Klauseln vorgeschlagen werden, ORDER BY
ist dies optional. Die Einschränkung in SQL Server hat mit Einschränkungen in unserer Parser-Technologie zu tun, die die optionale Syntax nicht verarbeiten können, ohne OFFSET
ein reserviertes Schlüsselwort zu erstellen. Wir können es in Zukunft entfernen.
Nun zu ...
Bis dahin , wenn man verwenden möchte OFFSET
und FETCH
ohne eine bestimmte ORDER BY
, ist eine Behelfslösung ein „nichts tun“ order by - Klausel hinzuzufügen. Beispiel:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;