SQL Server: Jak uzyskać wszystkie rekordy potomne, którym nadano identyfikator nadrzędny, w tabeli odwołującej się do siebie

Hi Mam tabelę, która odwołuje się do siebie i muszę mieć możliwość wyboru rodzica i wszystkich jego rekordów podrzędnych z danego identyfikatora nadrzędnego.

Mój stół jest następujący:

ID   | ParentID | Name         
-----------------------              
1      NULL       A
2      1          B-1
3      1          B-2
4      2          C-1
5      2          C-2

W powyższym przykładzie chciałbym móc przekazać wartość 1 i uzyskać wszystkie rekordy powyżej.

Do tej pory wymyśliłem następującą rekurencyjną funkcję-wartościowaną tabelą, ale nie zachowuje się ona zgodnie z oczekiwaniami (zwracając tylko pierwszy rekord).

CREATE FUNCTION [dbo].[SelectBranches]
(   
    @id INT
    ,@parentId INT
)
RETURNS @branchTable TABLE
(
    ID INT
    ,ParentID INT
    ,Name INT
)
AS
BEGIN 

    IF @branchId IS NOT NULL BEGIN

        INSERT INTO @branchTable
        SELECT 
            ID
            ,ParentID
            ,Name
        FROM
            tblLinkAdvertiserCity
        WHERE
            ID = @id

    END

    INSERT INTO @branchTable
    SELECT
        br.ID
        ,br.ParentID
        ,br.Name
    FROM
        @branchTable b
    CROSS APPLY
        dbo.SelectBranches(NULL, b.ParentID) br

    RETURN
END
GO

questionAnswers(3)

yourAnswerToTheQuestion