Von: Ashish Kumar Mehta | Updated: 2011-04-18 | Comments (4) | Related: 1 | 2 | 3 | 4 | 5 | Mehr > Paging

Problem

Bei der Durchsicht der neuen Funktionen in SQL Server 2012 stieß ich auf eine neue Funktion OFFSET und FETCH. Die OFFSET- und FETCH-Klausel von SQL Server 2012 bietet Ihnen die Möglichkeit, nur eine Seite oder ein Fenster der Ergebnisse aus der gesamten Ergebnismenge abzurufen. In diesem Tipp sehen wir uns ein Beispiel an, das die OFFSET- und FETCH-Funktion von SQL Server 2012 verwendet. Außerdem zeigen wir, wie Sie SQL Server Paging oder SQL-Datenseitenabrufe mit dieser neuen Funktion implementieren können.

Lösung

Mit dieser Funktion von SQL Server 2012 kann man SQL Server Paging leicht implementieren, während die Ergebnisse auf dem Client angezeigt werden. Wir werden uns ein einfaches Beispiel ansehen und dann auch, wie Sie eine gespeicherte Prozedur konstruieren können, um SQL Paging zu implementieren.

Lassen Sie uns ein einfaches Beispiel durchgehen, das zeigt, wie man die OFFSET- und FETCH-Funktion von SQL Server 2012 verwendet. Wie Sie unten sehen, sieht die TSQL genauso aus wie das, was Sie heute schreiben, außer dass wir nach der ORDER BY-Klausel die Befehle OFFSET und FETCH haben. Dabei ist zu beachten, dass Sie eine ORDER BY-Klausel verwenden müssen, um diese Funktion zu nutzen. Der OFFSET-Befehl weist SQL an, die ersten 100 Zeilen zu überspringen, und der FETCH-Befehl ruft die nächsten 5 Zeilen ab.

USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO

Der folgende Ausschnitt zeigt die Ausgabe, wenn die oben genannten Befehle ausgeführt werden. Dies zeigt, dass die ersten 100 Zeilen verworfen wurden und die Abfrage die nächsten 5 Zeilen des vollständigen Datensatzes abgerufen hat.

Lassen Sie uns ein weiteres Beispiel durchgehen, in dem wir eine gespeicherte Prozedur erstellen, die die OFFSET- und FETCH-Funktion von SQL Server 2012 verwendet, um ein SQL-Paging zu erreichen, während die Ergebnisse auf den Clientcomputern angezeigt werden. In dieser gespeicherten Prozedur geben wir eine Seitennummer und die Anzahl der zurückzugebenden Zeilen ein. Diese Werte werden dann berechnet, um die richtige Seite und die Anzahl der Zeilen zu erhalten.

USE AdventureWorks2008R2GOIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'.') AND type in (N'P', N'PC'))DROP PROCEDURE .GOCREATE PROCEDURE ExampleUsageOfSQLServerDenaliPagingFeature ( @PageNo INT, @RowCountPerPage INT )ASSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET (@PageNo - 1) * @RowCountPerPage ROWS FETCH NEXT @RowCountPerPage ROWS ONLYGO

Lassen Sie uns fortfahren und die gespeicherte Prozedur mit dem folgenden Befehl ausführen. Dadurch erhalten wir fünf Datensätze ab Seite 21, wobei die Datensätze nach BusinessEntityID geordnet sind.

/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO

Der folgende Ausschnitt zeigt die Ausgabe, sobald die oben genannte gespeicherte Prozedur erfolgreich ausgeführt wurde. Sie können sehen, dass die ersten 100 (20 Seiten * 5 Zeilen pro Seite = 100) Zeilen verworfen wurden und die gespeicherte Prozedur nur die nächsten 5 Zeilen abgerufen hat, wodurch die Anzahl der an den Client gesendeten Zeilen begrenzt wurde.

Sie haben in diesem Tipp gesehen, wie einfach Sie SQL Server Paging mithilfe der OFFSET- und FETCH-Funktion von SQL Server 2012 erreichen können. SQL Paging ist mit dieser neuen Funktion nicht mehr so schwer wie früher.

Weitere Schritte
  • Erhalten Sie einen Überblick über die WITH RESULT SETS Funktion von SQL Server 2012

Letzte Aktualisierung: 2011-04-18

Über den Autor
Ashish Kumar Mehta trägt seit 2009 zur MSSQLTips.com Gemeinschaft seit 2009 mit über 60 Tipps.
Alle meine Tipps ansehen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.