SQL Server: cómo obtener todos los registros secundarios a los que se les asigna un ID principal en una tabla de autorreferencia

Hola, tengo una tabla que hace referencia a sí misma y necesito poder seleccionar el padre y todos los registros secundarios de un ID de padre determinado.

Mi tabla es la siguiente:

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

Entonces, para el ejemplo anterior, me gustaría poder pasar un valor de 1 y obtener todos los registros anteriores.

Hasta ahora, he encontrado la siguiente función de valor de tabla recursiva pero no se comporta como se esperaba (solo devolviendo el primer registro).

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta