TSQL Рекурсивное обновление? - PullRequest
3 голосов
/ 01 декабря 2010

Мне интересно, существует ли рекурсивное обновление в 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 до самой верхней строки?

1 Ответ

8 голосов
/ 01 декабря 2010

Да, так и должно быть. 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;
...