Мне интересно, существует ли рекурсивное обновление в tsql (CTE)
ID parentID value -- -------- ----- 1 NULL 0 2 1 0 3 2 0 4 3 0 5 4 0 6 5 0
Можно ли рекурсивно обновить столбец value, используя, например, CTE от ID = 6 до самой верхней строки?
value
Да, так и должно быть. MSDN приводит пример :
USE AdventureWorks; GO WITH DirectReports(EmployeeID, NewVacationHours, EmployeeLevel) AS (SELECT e.EmployeeID, e.VacationHours, 1 FROM HumanResources.Employee AS e WHERE e.ManagerID = 12 UNION ALL SELECT e.EmployeeID, e.VacationHours, EmployeeLevel + 1 FROM HumanResources.Employee as e JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID ) UPDATE HumanResources.Employee SET VacationHours = VacationHours * 1.25 FROM HumanResources.Employee AS e JOIN DirectReports AS d ON e.EmployeeID = d.EmployeeID;