In SQL Server kann die Auswahl einer bestimmten Anzahl von Zeilen mithilfe der Funktion ROW_NUMBER() erreicht werden. Es gibt jedoch Einschränkungen hinsichtlich der Anzahl der Zeilen, die zurückgegeben werden können.
Die bereitgestellte anfängliche Abfrage gibt keine bestimmte Tabelle an, aus der Zeilen ausgewählt werden sollen. Wenn diese Abfrage für sys.all_columns ausgeführt wird, werden nur bis zu 7374 Zeilen zurückgegeben, da dies die Gesamtzahl der Zeilen in dieser Tabelle ist.
Um eine größere Anzahl von Zeilen auszuwählen , alternative Methoden können angewendet werden:
Verwenden von Zahlen Tabelle:
DECLARE @start INT = 1; DECLARE @end INT = 10; WITH numbers AS ( SELECT @start AS number UNION ALL SELECT number + 1 FROM numbers WHERE number < @end ) SELECT * FROM numbers OPTION (MAXRECURSION 0);
Durch die Verwendung einer Zahlentabelle können unendlich viele Zeilen generiert werden. Dieser Ansatz kann jedoch relativ langsam sein.
Für eine verbesserte Leistung können kaskadierte CTEs zum Erstellen einer Tally-Tabelle verwendet werden:
DECLARE @Range AS INT = 7374 ;WITH E1(N) AS( -- 10 ^ 1 = 10 rows SELECT 1 FROM(VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))t(N) ), E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b), -- 10 ^ 2 = 100 rows E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b), -- 10 ^ 4 = 10,000 rows E8(N) AS(SELECT 1 FROM E4 a CROSS JOIN E4 b), -- 10 ^ 8 = 10,000,000 rows CteTally(N) AS( SELECT TOP(@Range) ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) FROM E8 ) SELECT * FROM CteTally
Dieser Ansatz ist in der Lage, eine große Anzahl von Zeilen ohne Lesevorgänge zu generieren. Weitere Leistungsvergleiche und zusätzliche Details zu Tally Tables finden Sie unter den bereitgestellten Links in der Antwort.
Das obige ist der detaillierte Inhalt vonWie kann ich eine bestimmte Anzahl von Zeilen in SQL Server effizient auswählen, auch über das sys.all_columns-Limit hinaus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!