2013-10-08 6 views
3

J'ai une table par rapport auto-référencement,Requête récursive T-SQL - comment le faire?

ID parentID UserId Title 
1 null  100 A 
2  1  100 B 
3  2  100 C 
4  2  100 D 
5  null 100 E 
6  5  100 F 

Je veux mettre à jour UserId 100-101 pour tous les enregistrements avec ID = 1 et ses enfants, donc je veux avoir

ID parentID UserId Title 
1 null  101 A 
2  1  101 B 
3  2  101 C 
4  2  101 D 
5  null 100 E 
6  5  100 F 

Comment puis-je le faire en T-SQL?

Répondre

10

Vous souhaitez probablement utiliser un common table expression qui vous permet de générer des requêtes récursives.

par exemple:

;with cte as 
(
    select * from yourtable where id=1 
    union all 
    select t.* from cte 
     inner join yourtable t on cte.id = t.parentid 
) 
    update yourtable 
    set userid = 101 
    where id in (select id from cte)