已知父子关系记录存在于一张表中:
__________________________________________
id   |   Parent_id   |   Name
------------------------------------------
1    |   -1          |   张三
------------------------------------------
2    |   1           |   里斯
------------------------------------------
3    |   1           |   王武
------------------------------------------
4    |   2           |   赵六
------------------------------------------
5    |   3           |   牛七
------------------------------------------
.......用一个存储过程,计算出某用户下级共有多少子记录 P_GetUsersScore @User_id bigint, @Score int output
AS
.....
.....
set @Score = xxxx
GO

解决方案 »

  1.   

    --建立測試環境
    Create Table Tree
    (id bigint,
     Parent_id bigint,
     Name Nvarchar(10))
    Insert Tree Select 1,       -1,             N'张三'
    Union All Select 2,       1,              N'里斯'
    Union All Select 3,       1,              N'王武'
    Union All Select 4,       2,              N'赵六'
    Union All Select 5,       3,              N'牛七'
    GO
    --建立存儲過程
    Create Procedure P_GetUsersScore @User_id bigint, @Score int output
    AS
    Select * Into #T From Tree Where id = @User_id
    While @@ROWCOUNT > 0
    Insert #T Select A.* From Tree A Inner Join #T B On A.Parent_id = B.id Where A.id Not In (Select Distinct id From #T)
    Select @Score = Count(*) - 1 From #T
    Drop Table #T
    GO
    --測試
    Declare @Score int
    EXEC P_GetUsersScore 1, @Score output
    Select @Score As Score
    EXEC P_GetUsersScore 2, @Score output
    Select @Score As Score
    GO
    --刪除測試環境
    Drop Table Tree
    Drop Procedure P_GetUsersScore
    --結果
    /*
    Score
    4Score
    1
    */
      

  2.   

    Insert #T Select A.* From Tree A Inner Join #T B On A.Parent_id = B.id Where A.id Not In (Select Distinct id From #T)请问A和B是什么啊?谢谢
      

  3.   

    A B分別是Tree(也就是你表)和#T(存儲過程中的臨時表)的別名