Oft müssen Entwickler die Paginierung der Suchergebnisse implementieren. Paginierung ist der Prozess des Aufteilens der Ergebnisse einer Abfrage in diskrete nummerierte Seiten.
SQL Server 2012 hat eine neue und einfache Methode zur Implementierung der Paginierung mithilfe von eingeführt OFFSET und FETCH NEXT. Dieser Prozess ist im Vergleich zu früheren komplexen Methoden wie z. B. der Verwendung von row_number tatsächlich schneller. Diese Funktion ähnelt der MySQL-Klausel "Limit / Offset".
OFFSET: Gibt die Anzahl der Zeilen an, die übersprungen werden sollen, bevor Zeilen zurückgegeben werden
FETCH NEXT: Die Anzahl der Zeilen, die im Ergebnis angezeigt werden sollen
Lass uns erforschen Order By Offset-Abruf in SQL Server 2012 mit Beispielen.
Erstellen Sie eine Tabelle mit dem Namen COMPANY, und füllen Sie sie mit einigen Daten auf.
WENN OBJECT_ID ('COMPANY') NICHT NULL DROP TABLE FIRMA GO CREATE TABLE COMPANY (ID INT PRIMARY KEY, NAME VARCHAR (25), STANDORT VARCHAR (25)) GO INSERT IN COMPANY WERTE (1, 'HCL', 'London' ), (2, "HP", "Bangalore"), (3, "Microsoft", "Bangalore"), (4, "Infosys", "Pune"), (5, "Google", "London"), (6, "GE", "London"), (7, "AltiSource", "New York"), (8, "Facebook", "Palo Alto"), (9, "IBM", "New York") , (10, 'TCS', 'Mumbai') GEWÄHLEN * VON FIRMA GEHEN
Problem 1.1 - Nur mit OFFSET
ID, NAME, LAGE AUS UNTERNEHMEN BESTELLEN NACH ID OFFSET 3 REIHEN
In der obigen Abfrage verwenden wir nur OFFSET, sodass die ersten drei Zeilen übersprungen werden und alle verbleibenden Zeilen in einer bestimmten Reihenfolge zurückgegeben werden.
Problem 1.2 - Nullzeilen überspringen und die ersten fünf Zeilen abrufen.
WÄHLEN SIE ID, NAME, STANDORT VON UNTERNEHMEN BESTELLEN NACH ID OFFSET 0 ROWS FETCH NEXT 5 ROWS NUR
In der obigen Abfrage bedeutet OFFSET 0 ROWS, dass wir die Null übersprungen haben und FETCH NEXT 5 beabsichtigt, die nächsten fünf Zeilen abzurufen.
Problem 1.3 - Überspringen Sie die ersten fünf Zeilen und holen Sie die nächsten fünf Zeilen ab.
WÄHLEN SIE ID, NAME, STANDORT VON FIRMA AN ORDNUNG NACH ID OFFSET 5 REIHEN FETCH NÄCHSTE 5 REIHEN
Hier überspringen wir die ersten fünf Reihen und holen die nächsten fünf Reihen ab.
Das obige Ergebnis kann mithilfe von SQL Server 2005/2008 mithilfe von row_number und einer abgeleiteten Tabelle erzielt werden.
SELECT ID, NAME, LOCATION FROM (SELECT ID, NAME, LOCATION, ROW_NUMBER () OVER (ORDER BY ID) als Rownum FROM FIRMA c) DT WHERE DT.rownum ZWISCHEN 6 UND 10
Leistungsvergleich zwischen OFFSET FETCH und ROW_NUMBER
Der Ansatz von OFFSET FETCH nahm an 0.003294, und der Ansatz von row_number nahm an 0.0033038. Dies zeigt den neueren Ansatz OFFSET FETCH in SQL Server 2012 ist schneller.
Problem 1.4 - Verwenden von Variablen mit OFFSET und FETCH
DECLARE @OffSetRows AS INT = 5 DECLARE @FetchRows AS INT = 5 SELECT ID, NAME, STANDORT VON FIRMA BESTELLEN NACH ID OFFSET @OffSetRows ROWS NUR FETCH NEXT @FetchRows ROWS
Dies ist dasselbe wie bei Problem 1.3, aber hier verwenden wir Variablen zum Speichern von OFFSET- und FETCH-Werten.