Heim >Datenbank >MySQL-Tutorial >Wie wählt man effizient Zeilen in SQL Server aus, die über die Zeilenbeschränkung von 7374 hinausgehen?

Wie wählt man effizient Zeilen in SQL Server aus, die über die Zeilenbeschränkung von 7374 hinausgehen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 20:26:19572Durchsuche

How to Efficiently Select Rows in SQL Server Beyond the 7374 Row Limit?

Auswählen von Zeilen in SQL Server: Umgang mit großen Zahlen über 7374 Zeilen

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:

  • NUMERIC_TABLE()-Funktion (Azure SQL-Datenbank und SQL Server 2022 und höher)
  • Rekursive gespeicherte Prozedur (SQL Server 2000 und höher)
  • Identitätsspalte mit Startwert und Inkrement (SQL Server 2005 und später)

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!

Stellungnahme:
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