多対多の親子関係テーブルがあります
parentid int not null
childid int not null
会社a、b、c、d、eがあるとしましょう
a
..b
....c
..c
d
..e
....b
......c
このクエリで上位の親を1つ返すようになりました
FUNCTION [dbo].[getRootCompagny] 
(
    @root int
)
RETURNS int
AS
BEGIN
DECLARE @parent int
SELECT @parent = companyparentid from companyrelation where companychildid = @root
if @parent is not null
   set @root = dbo.getRootCompagny(@parent)
RETURN @root
END
bを渡すと、
a
..b
....c
..c
私が書いたクエリは1つの最上位の親しか管理できないためです。最初のツリーのように、ツリー全体を取得できるようにするには、どのように修正しますか?
これが私のCTEです
    PROCEDURE [dbo].[GetCompanyRelation]
    @root int
AS
BEGIN
    SET NOCOUNT ON;
            set @root = dbo.getRootCompagny(@root)
    WITH cieCTE(CompanyChildid, CompanyParentid, depth, sortcol)
        AS
        (
            -- root member
            SELECT @root
                    , null 
                    , 0
                    , CAST(@root AS VARBINARY(900))
            UNION ALL
            -- recursive member
            SELECT R.CompanyChildid
                    , R.CompanyParentid
                    , C.depth+1
                    , CAST(sortcol + CAST(R.CompanyChildid AS BINARY(4)) AS VARBINARY(900))
            FROM CompanyRelation AS R JOIN cieCTE AS C ON R.CompanyParentid = C.CompanyChildid
        )
        -- outer query
        SELECT cieCTE.depth
                , cieCTE.CompanyChildid as ChildID
                , cieCTE.CompanyParentid as ParentId
                , company.[name] as [Name]
        FROM cieCTE inner join company on cieCTE.CompanyChildid = company.companyid
        ORDER BY sortcol
END
結局、上記のロジックで、私はa、dを取得する方法を取得しますか?