ID1 ID2 
 
6666 5555   
7777 6666   
8888 7777   
9999 8888   
1111 9999   
2222 1111   
3333 2222 说明
3333 的上级是2222
2222 的上级是1111
依次类推写出语句 查询出7777下级所有记录  结果如下8888 7777   
9999 8888   
1111 9999   
2222 1111   
3333 2222
不要使用 WITH AS 语句

解决方案 »

  1.   

    用函数?
    CREATE FUNCTION [dbo].[f_Cid](@ID INT)
    RETURNS @t_Level TABLE(ID INT,Level int)
    AS
    BEGIN
        DECLARE @Level int
        SET @Level=1
        INSERT @t_Level SELECT @ID,@Level
        WHILE @@ROWCOUNT>0
        BEGIN
            SET @Level=@Level+1
            INSERT @t_Level SELECT a.ID1,@Level
            FROM tb a,@t_Level b
            WHERE a.ID2=b.ID
                AND b.Level=@Level-1
        END
        RETURN
    END
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([ID1] int,[ID2] int)
    insert [tb]
    select 6666,5555 union all
    select 7777,6666 union all
    select 8888,7777 union all
    select 9999,8888 union all
    select 1111,9999 union all
    select 2222,1111 union all
    select 3333,2222
    goSELECT a.*
    FROM tb a,f_Cid(7777) b
    WHERE a.ID2=b.ID/**
    ID1         ID2
    ----------- -----------
    8888        7777
    9999        8888
    1111        9999
    2222        1111
    3333        2222(5 行受影响)
    **/