2010-12-01 110 views
3

我不知道是否存在于TSQL(CTE)递归更新TSQL递归更新?

ID parentID value 
-- -------- ----- 
1 NULL  0 
2 1  0 
3 2  0 
4 3  0 
5 4  0 
6 5  0 

我能够更新列value递归使用e.g CTE从ID = 6至最顶部行?

+0

您想更新什么?是一个程序循环好吗?或者是单个更新声明中的全部要求? – Randy 2010-12-01 13:19:53

+0

我犯了一个错误,再读一遍最后一句 – Tony 2010-12-01 13:22:25

回答

8

是的,应该是。 MSDN gives an example

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;