Interogări ierarhice și recursive în SQL Server
Jasmin Ludolf
Content Developer
Este format din 4 părți:
WITH cte_name AS (-- Anchor member initial_queryUNION ALL -- Recursive member recursive_query termination_condition )SELECT * FROM cte_name
Pentru mai mult de 100 de pași de recursivitate, creșteți numărul acestora:
OPTION(MAXRECURSION 32767)Instrucțiunile SQL următoare nu sunt permise: GROUP BY, HAVING, LEFT JOIN, RIGHT JOIN, OUTER JOIN, SELECT DISTINCT, Subqueries,TOP
Numărul de coloane ale membrului ancoră și ale celui recursiv trebuie să fie același
Tipurile de date ale membrului ancoră și ale celui recursiv trebuie să fie aceleași
Calcularea factorialului:
Factorialul lui
neste definit ca produsul tuturor numerelor întregi pozitive mai mici sau egale cun:
3! = 1 x 2 x 3 = 6
Factorialul n! este definit recursiv astfel:
0! = 1 pentru iterație = 1(n+1)! = n! * (iterație+1) pentru iterație > 1WITH recursion AS(SELECT 1 AS iterationCounter,1 AS factorialUNION ALL SELECT iterationCounter+1,factorial * (iterationCounter+1) FROM recursionWHERE iterationCounter < 10 )SELECT factorial FROM recursion
3628800
Interogări ierarhice și recursive în SQL Server