Введение в рекурсивные CTE

Иерархические и рекурсивные запросы в SQL Server

Jasmin Ludolf

Content Developer

Рекурсивный CTE

Состоит из 4 частей:

WITH cte_name AS (

-- Anchor member initial_query
UNION ALL -- Recursive member recursive_query termination_condition )
SELECT * FROM cte_name
Иерархические и рекурсивные запросы в SQL Server

Руководство по использованию рекурсивного CTE

  • При более чем 100 шагах рекурсии увеличьте их число:

    • OPTION(MAXRECURSION 32767)
  • Следующие операторы SQL не допускаются: GROUP BY, HAVING, LEFT JOIN, RIGHT JOIN, OUTER JOIN, SELECT DISTINCT, Subqueries,TOP

  • Число столбцов у опорного и рекурсивного элементов совпадает

  • Типы данных опорного и рекурсивного элементов совпадают

Иерархические и рекурсивные запросы в SQL Server

Пример рекурсии

Вычисление факториала:

Факториал n определяется как произведение всех положительных целых чисел, не превышающих n:

3! = 1 x 2 x 3 = 6

Факториал n! определяется рекурсивно следующим образом:

  • 0! = 1 for iteration = 1
  • (n+1)! = n! * (iteration+1) for iteration > 1
Иерархические и рекурсивные запросы в SQL Server

Пример рекурсии в коде

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
Иерархические и рекурсивные запросы в SQL Server

Давайте потренируемся!

Иерархические и рекурсивные запросы в SQL Server

Preparing Video For Download...