Replikation der LIMIT-Funktionalität von MySQL in Microsoft SQL Server 2000
MySQLs LIMIT
-Klausel vereinfacht das Abrufen einer bestimmten Anzahl von Zeilen. SQL Server 2000 verfügt nicht über ein direktes Äquivalent und erfordert Problemumgehungen. Hier sind mehrere Methoden, um ähnliche Ergebnisse zu erzielen:
Methode 1: Verschachtelte Abfragen (SQL Server 2000)
Dieser Ansatz verwendet verschachtelte SELECT
-Anweisungen, um Zeilen innerhalb eines definierten Bereichs zu filtern:
<code class="language-sql">SELECT TOP 25 * FROM ( SELECT TOP 75 * FROM table ORDER BY field ASC ) a ORDER BY field DESC;</code>
Dies ruft die Zeilen 26–75 nach der Bestellung nach field
ab. Hinweis: Diese Methode ist für große Datensätze weniger effizient und verarbeitet Szenarien, die nicht ein Vielfaches der Seitengröße sind, für die letzte Seite nicht ordnungsgemäß.
Methode 2: Nutzung einer eindeutigen Spalte (SQL Server 2000)
Wenn Ihre Tabelle eine eindeutige Spalte hat (z. B. einen Primärschlüssel), schließt diese Technik bereits ausgewählte Zeilen aus:
<code class="language-sql">SELECT TOP n * FROM tablename WHERE key NOT IN ( SELECT TOP x key FROM tablename ORDER BY key );</code>
Dadurch werden n
Zeilen ausgewählt, mit Ausnahme der obersten x
Zeilen, sortiert nach der Spalte key
. Dies ist auch bei großen Tabellen weniger effizient.
Methode 3: Verwenden von ROW_NUMBER() (SQL Server 2005 und höher)
Für SQL Server 2005 und höher bietet die Funktion ROW_NUMBER()
eine elegantere Lösung:
<code class="language-sql">SELECT z2.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, z1.* FROM ( ...original SQL query... ) z1 ) z2 WHERE z2.rownum BETWEEN @offset + 1 AND @offset + @count;</code>
Dadurch wird jedem Ergebnis eine Zeilennummer zugewiesen und dann basierend auf einem angegebenen Offset (@offset
) und einer bestimmten Anzahl (@count
) gefiltert. Dies ist im Allgemeinen die effizienteste und flexibelste Methode für neuere SQL Server-Versionen.
Methode 4: EXCEPT-Anweisung (SQL Server 2005 und höher)
Eine weitere Option für SQL Server 2005 und höher verwendet den EXCEPT
Set-Operator:
<code class="language-sql">SELECT * FROM ( SELECT TOP 75 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS foo EXCEPT SELECT * FROM ( SELECT TOP 50 COL1, COL2 FROM MYTABLE ORDER BY COL3 ) AS bar;</code>
Dadurch werden die Zeilen 51–75 nach der Bestellung durch COL3
ausgewählt. Ähnlich wie der ROW_NUMBER()
-Ansatz ist dies eine effizientere Lösung für neuere SQL Server-Versionen. Für komplexe Szenarien ist es jedoch weniger intuitiv als ROW_NUMBER()
. Wählen Sie die Methode, die am besten zu Ihrer SQL Server-Version und Datensatzgröße passt.
Das obige ist der detaillierte Inhalt vonWie ahme ich die LIMIT-Klausel von MySQL in Microsoft SQL Server 2000 nach?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!