Introduktion till rekursiva CTE

Hierarkiska och rekursiva frågor i SQL Server

Jasmin Ludolf

Content Developer

Den rekursiva CTE

Består av 4 delar:

WITH cte_name AS (

-- Anchor member initial_query
UNION ALL -- Recursive member recursive_query termination_condition )
SELECT * FROM cte_name
Hierarkiska och rekursiva frågor i SQL Server

Guide till rekursiva CTE

  • Vid fler än 100 rekursionssteg, öka antalet tillåtna steg:

    • OPTION(MAXRECURSION 32767)
  • Följande SQL-satser är inte tillåtna: GROUP BY, HAVING, LEFT JOIN, RIGHT JOIN, OUTER JOIN, SELECT DISTINCT, Subqueries,TOP

  • Antalet kolumner i anchor- och rekursiv medlem måste vara detsamma

  • Datatyperna i anchor- och rekursiv medlem måste vara desamma

Hierarkiska och rekursiva frågor i SQL Server

Rekursivt exempel

Beräkning av fakultet:

Fakulteten av n definieras som produkten av alla positiva heltal mindre än eller lika med n:

3! = 1 x 2 x 3 = 6

Fakulteten n! definieras rekursivt enligt följande:

  • 0! = 1 for iteration = 1
  • (n+1)! = n! * (iteration+1) for iteration > 1
Hierarkiska och rekursiva frågor i SQL Server

Rekursivt exempel i kod

WITH recursion AS

(SELECT 1 AS iterationCounter,1 AS factorial
UNION ALL SELECT iterationCounter+1,factorial * (iterationCounter+1) FROM recursion
WHERE iterationCounter < 10 )
SELECT factorial FROM recursion
3628800
Hierarkiska och rekursiva frågor i SQL Server

Nu kör vi en övning!

Hierarkiska och rekursiva frågor i SQL Server

Preparing Video For Download...