Heim > Datenbank > MySQL-Tutorial > Wie kann der maximale Rekursionsfehler von SQL Server in rekursiven CTEs behoben werden?

Wie kann der maximale Rekursionsfehler von SQL Server in rekursiven CTEs behoben werden?

Patricia Arquette
Freigeben: 2025-01-10 06:02:40
Original
124 Leute haben es durchsucht

How to Solve SQL Server's Max Recursion Error in Recursive CTEs?

Überwindung des SQL Server-Rekursionslimits in rekursiven CTEs

Beim Arbeiten mit rekursiven Common Table Expressions (CTEs) in SQL Server kann der gefürchtete Fehler „Maximale Rekursionstiefe überschritten“ auftreten. Dies geschieht, wenn Ihre verschachtelten rekursiven Abfragen den vordefinierten Grenzwert der Datenbank überschreiten.

Die Lösung besteht in der Verwendung der Option maxrecursion:

So ändern Sie Ihre Abfrage, um dieses Problem zu beheben:

<code class="language-sql">WITH EmployeeHierarchy AS (
    SELECT 
        EMP_SRC_ID_NR AS Id, USR_ACV_DIR_ID_TE AS Uuid, 
        ISNULL(Employees.APV_MGR_EMP_ID, '0') AS ApprovalManagerId 
    FROM 
        dbo.[tEmployees] AS Employees WITH (NOLOCK)
    WHERE 
        APV_MGR_EMP_ID = @Id 
        AND Employees.APV_MGR_EMP_ID IS NOT NULL 
        AND Employees.EMP_SRC_ID_NR IS NOT NULL  

    UNION ALL

    SELECT 
        EMP_SRC_ID_NR AS Id, USR_ACV_DIR_ID_TE AS Uuid, 
        ISNULL(Employees.UPS_ACP_EMP_NR, '1') AS ApprovalManagerId 
    FROM 
        dbo.[tEmployees] AS Employees WITH (NOLOCK)
    WHERE 
        UPS_ACP_EMP_NR = @Id 
        AND Employees.APV_MGR_EMP_ID IS NOT NULL 
        AND Employees.EMP_SRC_ID_NR IS NOT NULL  

    UNION ALL

    SELECT 
        Employees.EMP_SRC_ID_NR, Employees.USR_ACV_DIR_ID_TE, 
        ISNULL(Employees.APV_MGR_EMP_ID, '2')  
    FROM 
        dbo.[tEmployees] AS Employees WITH (NOLOCK)
    JOIN 
        EmployeeHierarchy ON Employees.APV_MGR_EMP_ID = EmployeeHierarchy.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 EmployeeHierarchy
OPTION (MAXRECURSION 0);</code>
Nach dem Login kopieren

Durch das Anhängen von OPTION (MAXRECURSION 0) beseitigen Sie effektiv die Rekursionsbeschränkung, sodass die Abfrage unbegrenzt ausgeführt werden kann. Seien Sie jedoch vorsichtig, wenn Sie MAXRECURSION 0 verwenden. Stellen Sie sicher, dass Ihre CTE-Logik korrekt ist, um Endlosschleifen zu verhindern, die zu Leistungsproblemen oder Abstürzen führen könnten. Ziehen Sie alternative Ansätze in Betracht, wenn die Rekursionstiefe unerwartet groß ist. Die Verwendung von ISNULL anstelle von CASE vereinfacht den Code und verbessert die Lesbarkeit.

Das obige ist der detaillierte Inhalt vonWie kann der maximale Rekursionsfehler von SQL Server in rekursiven CTEs behoben werden?. 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