Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine bestimmte Anzahl von Zeilen in SQL Server effizient auswählen, auch über das sys.all_columns-Limit hinaus?

Wie kann ich eine bestimmte Anzahl von Zeilen in SQL Server effizient auswählen, auch über das sys.all_columns-Limit hinaus?

Barbara Streisand
Freigeben: 2024-12-28 16:13:05
Original
789 Leute haben es durchsucht

How Can I Efficiently Select a Specific Number of Rows in SQL Server, Even Beyond the sys.all_columns Limit?

Auswählen einer bestimmten Anzahl von Zeilen in SQL Server

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 Sys.Columns-Beschränkung

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.

Alternative Ansätze

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

Durch die Verwendung einer Zahlentabelle können unendlich viele Zeilen generiert werden. Dieser Ansatz kann jedoch relativ langsam sein.

Kaskadierte CTEs für eine Tally-Tabelle

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

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!

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