SQL Server: So erhalten Sie alle untergeordneten Datensätze mit einer übergeordneten ID in einer selbstreferenzierenden Tabelle

Hallo, ich habe eine Tabelle, die sich selbst referenziert, und ich muss in der Lage sein, das übergeordnete Element und alle seine untergeordneten Datensätze aus einer bestimmten übergeordneten ID auszuwählen.

Mein Tisch ist wie folgt:

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

Für das obige Beispiel möchte ich also den Wert 1 übergeben und alle oben genannten Datensätze abrufen können.

Bisher habe ich mir die folgende rekursive Tabellenwertfunktion ausgedacht, die sich jedoch nicht wie erwartet verhält (nur den ersten Datensatz zurückgibt).

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage