Вступ до рекурсивних CTE

Ієрархічні та рекурсивні запити в SQL Server

Jasmin Ludolf

Content Developer

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

Складається з 4 частин:

WITH cte_name AS (

-- Початковий (anchor) запит initial_query
UNION ALL -- Рекурсивний запит 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...