Ich möchte OFFSET verwenden und in meinem SQL Server 2012 abfragen. Aber ohne irgendeine Bestellung durch. Ich kann Bestellung nicht verwenden, weil meine Sortierreihenfolge verloren geht. Wie kann ich OFFSET und Fetch ohne Reihenfolge und Zeilennummer und wo in meiner Abfrage verwenden? Meine 2 Auswahltabellen haben dieselbe Struktur.
%Vor%Diese Abfrage hat einen Syntaxfehler beim OFFSET-Schlüsselwort.
Durch Hinzufügen einer Identitätsspalte zur temporären Tabellenvariablen
%Vor%Eine automatische Inkrementierungsnummer wird für jede Zeile in der Reihenfolge hinzugefügt, in der sie der temporären Tabelle hinzugefügt werden. Die Einsätze müssen diese Spalte nicht ausfüllen, sodass die Einsätze so bleiben können, wie sie sind. Die Identitätsspalte kann dann für die Bestellung verwendet werden:
%Vor%Sie können nicht vermeiden, die erforderliche Syntax eines ORDER BY mit OFFSET und FETCH zu verwenden.
Es ist jedoch möglich, die ORDER BY-Klausel zu trennen, die Sie angeben müssen, um aus der natürlichen Tabellenreihenfolge, die durch den Datensatzeinfügeprozess erstellt wurde, Auslagerungen durchzuführen.
Mit der folgenden Lösung müssen Sie keine Änderungen an der zugrunde liegenden Tabelle vornehmen:
%Vor%Nach der Recherche und laut Kommentaren lautet die klare und zusammenfassende Antwort: "Es gibt keinen Weg!"
Aber Sie können Ihre Sortierreihenfolge mit row_number () beibehalten. Damit Ich habe eine neue getestete Abfrage bereitgestellt, die die Sortierreihenfolge der temporären Tabelle (final table) mit OFFSET- und FETCH-Klausel enthält.
%Vor%Offset / Fetch erfordert eine order by-Klausel. Sie können das CURRENT_TIMESTAMP verwenden, um diese Anforderung zu umgehen, wenn Sie keine Bestellung ausführen möchten. Ich bin mir nicht sicher, aber dies sollte Zeilen basierend auf der Reihenfolge der Speicherung (gruppierten Index vielleicht) zurückgeben
Wenn Sie also Ihren Code ändern, sollte das Problem gelöst werden -
%Vor%Tags und Links sql-server sql-server-2012 sql-order-by offset fetch