Heim > Datenbank > MySQL-Tutorial > Wie kann ich den Fehler „Die maximale Rekursion von 100 wurde ausgeschöpft' in rekursiven SQL-CTEs beheben?

Wie kann ich den Fehler „Die maximale Rekursion von 100 wurde ausgeschöpft' in rekursiven SQL-CTEs beheben?

Susan Sarandon
Freigeben: 2025-01-10 07:10:41
Original
185 Leute haben es durchsucht

How Can I Fix

Fehlerbehebung bei rekursiven SQL-CTE-Fehlern: Überschreitung des Rekursionslimits

SQL-Abfragen, die rekursive Common Table Expressions (CTEs) verwenden, stoßen häufig auf den Fehler „Maximale Rekursion 100 erschöpft“. Dies tritt auf, wenn die rekursiven Aufrufe des CTE das Standard-Rekursionslimit (normalerweise 100) überschreiten.

Rekursive CTE-Fehler durch Ändern der Abfrage beheben

Lassen Sie uns anhand eines Beispiels das Abrufen von Mitarbeiterdaten und ihren hierarchischen Genehmigungsmanagern veranschaulichen:

<code class="language-sql">WITH EmployeeTree AS (
    -- Anchor member of the CTE (initial query)
    ...
    UNION ALL
    SELECT 
        Employees.EMP_SRC_ID_NR, Employees.USR_ACV_DIR_ID_TE, 
        ISNULL(Employees.APV_MGR_EMP_ID, '2')  -- Simplified NULL handling
    FROM 
        dbo.[tEmployees] as Employees WITH (NOLOCK)
    JOIN 
        EmployeeTree ON Employees.APV_MGR_EMP_ID = EmployeeTree.Id 
    WHERE 
        Employees.APV_MGR_EMP_ID IS NOT NULL 
        AND Employees.EMP_SRC_ID_NR IS NOT NULL             
)
SELECT 
    Id AS [EmployeeId], 
    Uuid AS [EmployeeUuid], 
    ApprovalManagerId AS [ManagerId] 
FROM EmployeeTree        </code>
Nach dem Login kopieren

Die Lösung beinhaltet die OPTION (MAXRECURSION)-Klausel:

<code class="language-sql">WITH EmployeeTree AS (
    -- Anchor member of the CTE (initial query)
    ...
    UNION ALL
    SELECT ...
    FROM ...
    JOIN EmployeeTree ON ...
)
OPTION (MAXRECURSION 0)
SELECT ...
FROM EmployeeTree        </code>
Nach dem Login kopieren

Diese Klausel steuert die Rekursionstiefe des CTE. Wenn Sie MAXRECURSION auf 0 setzen, wird das Rekursionslimit deaktiviert und der Fehler effektiv verhindert. Es ist jedoch Vorsicht geboten: Eine unendliche Rekursion kann zu Leistungsproblemen oder Abstürzen führen, wenn die hierarchischen Daten falsch strukturiert sind oder Zirkelverweise enthalten. Überprüfen Sie Ihre Daten und die CTE-Logik sorgfältig, um sicherzustellen, dass sie korrekt beendet wird, bevor Sie MAXRECURSION 0 verwenden. Eine robustere Lösung könnte darin bestehen, MAXRECURSION auf einen höheren, aber endlichen Wert zu setzen oder die Daten auf mögliche Endlosschleifen zu analysieren.

Das obige ist der detaillierte Inhalt vonWie kann ich den Fehler „Die maximale Rekursion von 100 wurde ausgeschöpft' in rekursiven SQL-CTEs beheben?. 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