3

我有一个名为 tblmodules 的表,它有 3 列:moduleid、name、parent_id。parent_id 列采用其他模块的值。前任:

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

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

4

1 回答 1

3

您需要递归 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小提琴

于 2013-01-18T23:13:55.490 回答