2016-04-16 4 views

ответ

2
DECLARE @ID bigint = 7 

DECLARE @table TABLE 
(
    id bigint, 
    name nvarchar(2), 
    parentid bigint 
) 

INSERT INTO @table 
VALUES (1, 'a', 0), (2, 'b1', 1), (3, 'b2', 1), 
     (4, 'c1', 2), (5, 'c2', 2), (6, 'd1', 3), 
     (7, 'd2', 3) 

--This part goes into the procedure 
;WITH cte AS 
(
    SELECT 
     id, name, parentid 
    FROM 
     @table --change table name to yours 
    WHERE 
     id = @ID 

    UNION ALL 

    SELECT 
     t.* 
    FROM 
     cte c 
    INNER JOIN 
     @table t ON c.parentid = t.id 
) 
SELECT * 
FROM cte 
ORDER BY id ASC 
OPTION (MAXRECURSION 100) 

Выход:

id name parentid 
---- ---- --------- 
1 a 0 
3 b2 1 
7 d2 3 
+0

вы можете объяснить код? – shahroz

+0

Вы можете прочитать это, чтобы уточнить https://technet.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspx – gofr1