Verwendung von OFFSET und Fetch ohne Reihenfolge von in SQL Server

8

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.

    
Mohsen Unlimited 22.06.2015, 13:20
quelle

5 Antworten

6

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%     
Me.Name 22.06.2015, 17:01
quelle
10

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%     
pixelda 22.03.2016 14:20
quelle
6

Es gibt eine noch einfachere Möglichkeit, eine Dummy-ORDER BY-Klausel zur Verfügung zu stellen:

%Vor%     
Jörg 05.07.2017 07:12
quelle
0

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%     
Mohsen Unlimited 22.06.2015 15:09
quelle
0

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%     
Diptiman Singh 21.09.2017 04:09
quelle