Рекурсивные SQL запросы
CTE(обобщенное табличное выражение) может ссылаться на себя, создавая рекурсивное CTE. Рекурсивное CTE многократно выполняется, чтобы возвращать подмножество данных до тех пор, пока не получится конечный результирующий набор. Обычно рекурсивные запросы используются для возвращения иерархических данных, например: отображение сотрудников в структуре организации или генерация последовательности. Структура рекурсивного CTE WITH cte_name ( column_name [,...n] ) AS ( CTE_query_definition –- Anchor member is defined. UNION ALL CTE_query_definition –- Recursive member is defined referencing cte_name. ) -- Statement using the CTE SELECT * FROM cte_name CTE разбивается на закрепленный и рекурсивный элементы. Запускается закрепленный элемент с созданием первого вызова. Рекурсивный элемент ссылается на закрепленный и вызывается пока не вернет пустой набор. Классический пример с сотрудниками DECLARE @Employees TABLE ( ID int NOT NULL, [Name] nvarchar(200) NOT NULL, Manag...