Иерархические и рекурсивные запросы в SQL Server
Jasmin Ludolf
Content Developer
Состоит из 4 частей:
WITH cte_name AS (-- Anchor member initial_queryUNION ALL -- Recursive member recursive_query termination_condition )SELECT * FROM cte_name
При более чем 100 шагах рекурсии увеличьте их число:
OPTION(MAXRECURSION 32767)Следующие операторы SQL не допускаются: GROUP BY, HAVING, LEFT JOIN, RIGHT JOIN, OUTER JOIN, SELECT DISTINCT, Subqueries,TOP
Число столбцов у опорного и рекурсивного элементов совпадает
Типы данных опорного и рекурсивного элементов совпадают
Вычисление факториала:
Факториал
nопределяется как произведение всех положительных целых чисел, не превышающихn:
3! = 1 x 2 x 3 = 6
Факториал n! определяется рекурсивно следующим образом:
0! = 1 for iteration = 1(n+1)! = n! * (iteration+1) for iteration > 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
Иерархические и рекурсивные запросы в SQL Server