Для использования рекурсивных запросов с несколькими общими табличными выражениями (CTE) необходимо следовать некоторым рекомендациям: 3
- Определить рекурсивное CTE. 3 Оно должно содержать по крайней мере два определения запросов — закреплённый элемент и рекурсивный элемент. 3 Все определения запросов закреплённого элемента нужно поставить перед первым определением рекурсивного элемента. 3
- Объединить закреплённые элементы. 3 Это можно сделать с помощью операторов над множествами: UNION ALL, UNION, INTERSECT или EXCEPT. 3 UNION ALL — единственный оператор, который может находиться между последним закреплённым элементом и первым рекурсивным элементом, а также применяться при объединении нескольких рекурсивных элементов. 3
- Проверить количество столбцов и типы данных. 3 У закреплённых и рекурсивных элементов должно совпадать количество столбцов, а тип данных столбца в рекурсивном элементе должен совпадать с типом данных соответствующего столбца в закреплённом элементе. 3
- Ограничить количество уровней рекурсии. 3 Это поможет предотвратить бесконечный цикл. 3 Для этого нужно указать MAXRECURSION и значение в диапазоне от 0 до 32 767 в предложении OPTION инструкции INSERT, UPDATE, DELETE или SELECT. 3
Рекурсивные запросы обычно применяются для работы с иерархическими или древовидными структурами данных. 2