SQL Server: Wie alle untergeordneten Datensätze mit einer übergeordneten ID in einer sich selbst referenzierenden Tabelle abgerufen werden

Hallo, ich habe eine Tabelle, die die Verweise selbst und ich muss in der Lage sein wählen Sie die übergeordnete und alle untergeordneten Datensätze aus einer bestimmten übergeordneten Id.

Meine Tabelle 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

Also für das obige Beispiel würde ich gerne in der Lage, übergeben Sie einen Wert von 1 und erhalten alle Datensätze vor.

Bisher habe ich mit der folgenden rekursiven Tabellenwertfunktion aber es ist nicht verhält wie erwartet (nur die Rücksendung des ersten Datensatzes).

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

InformationsquelleAutor der Frage Matthew Dresser | 2009-11-06

Schreibe einen Kommentar