Heim > Datenbank > MySQL-Tutorial > Gibt es ein direktes SQL-Äquivalent zu Skip() und Take() von LINQ?

Gibt es ein direktes SQL-Äquivalent zu Skip() und Take() von LINQ?

Susan Sarandon
Freigeben: 2024-12-15 15:27:20
Original
887 Leute haben es durchsucht

Is There a Direct SQL Equivalent to LINQ's Skip() and Take()?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

Diese Abfrage führt die folgenden Schritte aus:

  1. Sortieren Sie die Tabelle „Sales.SalesOrderHeader“. Aufsteigende Reihenfolge nach der Spalte „OrderDate“.
  2. Überspringen Sie die ersten 1000 Zeilen mithilfe von 'OFFSET'-Klausel.
  3. Nehmen Sie die nächsten 100 Zeilen mit der 'FETCH NEXT'-Klausel.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage