2010-12-01 21 views
3

TSQLに再帰更新が存在する場合、私は(CTE)は、私はそれが可能一番上の行に、ID = 6から例えばCTEを使用して再帰的にカラムvalueを更新するTSQL再帰的な更新?

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

思ったんだけど?

+0

何を更新しますか?手続き的なループですか?または単一の更新ステートメントのすべての要件ですか? – Randy

+0

私は間違いを犯し、最後の文をもう一度読んでください – Tony

答えて

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; 
+0

CTE自体は更新できません。これは、派生テーブル 'DirectReports'が派生テーブルの列が導出されるか定数であるために、派生テーブル 'DirectReports'が更新できないというエラーを返します。 –

+0

geez、もちろん...更新クエリのCTEテーブルに参加できます。 ...私はあなたにビールを借りている、人;)ありがとう! – Tony

+3

@トニー - 気にしないでください。あなたが私の答えを受け入れて以来、私を "あなたの陛下"と呼ぶなら、それは完全に十分でしょう。 :) –