Skip and Take in SQL: Ein LINQ-Äquivalent
Die Methoden .Skip() und .Take() von LINQ bieten eine bequeme Arbeitsweise mit einer Teilmenge der Daten im Speicher. In Situationen, in denen die zugrunde liegende Datenquelle eine große SQL-Datenbank ist, ist es jedoch oft vorzuziehen, diese Vorgänge direkt in SQL statt im Speicher auszuführen. Dadurch wird der Aufwand für die Übertragung großer Datenmengen in den Speicher vermieden.
Ein solches Szenario ist, wenn Sie einen bestimmten Zeilenbereich aus einer Datenbanktabelle auswählen müssen. LINQ stellt für diesen Zweck die Methoden .Skip() und .Take() bereit, aber gibt es ein direktes SQL-Äquivalent?
SQL Server 2012 und höher
SQL Server Ab 2012 wurde eine neue Syntax für den Zeilenversatz und die Zeilenbegrenzung eingeführt:
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
Zum Auswählen von Zeilen 1000-1100 aus einer bestimmten Tabelle würden Sie die folgende Abfrage verwenden:
SELECT * FROM Sales.SalesOrderHeader ORDER BY OrderDate OFFSET 1000 ROWS FETCH NEXT 100 ROWS ONLY
Diese Abfrage führt die folgenden Schritte aus:
Diese Lösung ist viel effizienter als die Ausführung derselben Operation im Speicher, da sie dies vermeidet die Notwendigkeit, alle Zeilen auszuwählen, nur um dann die ersten 1000 zu verwerfen und die nächsten 100 manuell auszuwählen.
Das obige ist der detaillierte Inhalt vonGibt es ein direktes SQL-Äquivalent zu Skip() und Take() von LINQ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!