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