2013-01-18 47 views
3

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

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

我想构建一个存储过程,让所有孩子的,如果我给存储过程作为一个参数的祖父母。对于上面的例子,我不想只有(父母),但我想要孩子和childofchild,因为他们在祖父母之下。任何帮助吗?

回答

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

相关问题