Sql获取表中的所有子项

时间:2013-01-18 23:08:37

标签: sql sql-server sql-server-2008

我有一个名为tblmodules的表,它有3列:moduleid,name,parent_id。列parent_id获取其他模块的值。例如:

Moduleid      Name       Parentid
--------     -----       --------
1           grandparent    Null
2            parent         1
3           child           2
4           childofChild    3

如果我将存储过程作为祖父项的参数给出,我想构造一个存储过程来获取所有子节点。对于上面的例子我不想只有(父)但我想要孩子和孩子,因为他们在祖父母下。有任何帮助吗?

1 个答案:

答案 0 :(得分:3)

您需要recursive CTE

CREATE PROC YourProc 
@ModuleId INT
AS
    WITH R
         AS (SELECT *
             FROM   YourTable
             WHERE  Moduleid = @ModuleId
             UNION ALL
             SELECT Y.*
             FROM   YourTable Y
                    JOIN R
                      ON R.Moduleid = Y.Parentid)
    SELECT *
    FROM   R 

SQL Fiddle