2011-06-27 57 views
1

我想知道如果有人能幫助我。TSQL ParentID遞歸SP

我有一個表,它是這樣的...

ID  ParentID 
1  0  
2  1 
3  2 
4  3 
5  4  

我想要做的是寫一個遞歸TSQL語句,將得到所有我的父母的ID。例如,如果我將5傳入存儲過程,它將返回4,3,2,1。

有誰知道如何做到這一點?如果有人能幫助,我們將非常感激!

+0

不是真的一個答案,但也許是一個新方向的暗示。如果您使用的是SQL 2008,請查看HierarchyId數據類型。它是爲此而構建的。它支持檢索所有的孩子,父母,兄弟姐妹等:http://msdn.microsoft.com/en-us/magazine/cc794278.aspx – NotMe

回答

2

這是一個例子,如何實現這一目標使用遞歸CTE:

DECLARE @id INT 
SET @id = 5 

CREATE TABLE #tmp (id INT , ParentId INT) 
INSERT INTO #tmp VALUES(1,0) 
INSERT INTO #tmp VALUES(2,1) 
INSERT INTO #tmp VALUES(3,2); 
INSERT INTO #tmp VALUES(4, 3); 
INSERT INTO #tmp VALUES(5,4); 

    WITH parent AS 
    (
     SELECT id, parentId from #tmp WHERE id = @id 
     UNION ALL 
     SELECT t.id, t.parentId FROM parent 
     INNER JOIN #tmp t ON t.id = parent.parentid 
    ) 

    SELECT id FROM parent 
    WHERE id <> @id;  

--OR

WITH parent AS 
    (
     SELECT tmp1.id, tmp1.parentId from #tmp AS tmp1 
     INNER JOIN #tmp AS tmp2 ON tmp1.id = tmp2.parentId 
     WHERE tmp2.id = @id 
     UNION ALL 
     SELECT t.id, t.parentId FROM parent 
     INNER JOIN #tmp t ON t.id = parent.parentid 
    ) 

    SELECT id FROM parent