Heim >Datenbank >MySQL-Tutorial >Wie wählt man effizient Zeilen in SQL Server aus, die über die Zeilenbeschränkung von 7374 hinausgehen?
Beim Versuch, Zeilen mit der Funktion ROW_NUMBER aus der Tabelle sys.all_columns abzurufen, kann es zu einer Einschränkung kommen . Ab 7374 Zeilen wird die Abfrage abrupt beendet. Dies liegt daran, dass Sie die maximale Anzahl verfügbarer Zeilen in sys.all_columns erreicht haben.
Kaskadierende CTEs zum Generieren großer Zahlen
Um diese Einschränkung zu überwinden, können Sie die Kaskadierung nutzen CTEs zum Erstellen einer „Zahlentabelle“ oder „Tally-Tabelle“. Dieser Ansatz gilt als die effizienteste Methode zum Generieren einer Tabelle aufeinanderfolgender Ganzzahlen. Der folgende Ausschnitt zeigt:
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
Erklärung
Der CTE E1 dient mit zehn Zeilen als Ausgangspunkt. Nachfolgende CTEs (E2, E4 usw.) führen Cross-Joins durch, um die Anzahl der Zeilen mit 10 zu multiplizieren. Dieser kaskadierende Ansatz ermöglicht es Ihnen, eine große Anzahl von Zeilen effizient zu generieren.
Unendliche Rekursionsvermeidung
Um einen Fehler im Zusammenhang mit der maximalen Rekursion zu verhindern, können Sie in der eine maximale Rekursionstiefe von 0 angeben Optionsklausel:
OPTION (MAXRECURSION 0)
Dies weist den Abfrageoptimierer an, die erforderliche Tiefe zu verwenden, um die Ausführung ohne Einschränkung abzuschließen.
Leistungsüberlegungen
Obwohl der rekursive Ansatz unkompliziert ist, kann er in bestimmten Szenarien langsamer sein. Erwägen Sie für eine optimiertere Lösung die Verwendung anderer Methoden wie der folgenden:
Fazit
Durch die Nutzung der kaskadierenden CTE-Technik oder die Erforschung alternativer Methoden können Sie eine große Anzahl von Zeilen in SQL Server effizient auswählen und so die Einschränkungen überwinden mit der Tabelle sys.all_columns aufgetreten.
Das obige ist der detaillierte Inhalt vonWie wählt man effizient Zeilen in SQL Server aus, die über die Zeilenbeschränkung von 7374 hinausgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!