Procedimiento almacenado de T-SQL para recorrer una jerarquía con recursividad

Tengo una pregunta específica.

Mi procedimiento almacenado no funciona correctamente. Le mostraré el procedimiento, la base de datos y el parámetro:

ALTER PROCEDURE [dbo].[ManufacturerParentToChild] 

@ServiceProviderId int,
@CarmakerId int

COMO COMIENZA

SET NOCOUNT ON;

DECLARE @childSPPId int, @isDeleted bit

DECLARE ServiceProviderChildren_Cursor CURSOR FOR

SELECT ServiceProviderId, isDeleted
FROM ServiceProvider 
WHERE ParentServiceProviderId = @ServiceProviderId; 

OPEN ServiceProviderChildren_Cursor;

FETCH NEXT FROM ServiceProviderChildren_Cursor INTO @childSPPId, @isDeleted;

WHILE @@FETCH_STATUS = 0
   BEGIN
        IF @ServiceProviderId > 0
        BEGIN
            EXEC ManufacturerParentToChild @childSPPId, @CarmakerId;

            IF (SELECT COUNT(*) FROM dbo.CarmakerPartnership WHERE ServiceProviderId = @childSPPId AND CarmakerId = @CarmakerId) = 0
            BEGIN
                IF (@isDeleted = 0)
                BEGIN
                    INSERT INTO dbo.CarmakerPartnership (CarmakerId, ServiceProviderId, CreatedBy, ChangedBy, ValidityPeriodFrom, ValidityPeriodTo) VALUES (@CarmakerId, @childSPPId, SYSTEM_USER, SYSTEM_USER, '01.01.1900 00:00:00', '31.12.9999 23:59:00.000')
                END
            END 
        END
      FETCH NEXT FROM ServiceProviderChildren_Cursor INTO @childSPPId;
   END;
CLOSE ServiceProviderChildren_Cursor;
DEALLOCATE ServiceProviderChildren_Cursor; END

Usted ve mi procedimiento almacenado arriba.

El proveedor de servicios de tabla de base de datos tiene 7 filas:

ServiceProviderId Name ParentServiceProviderId isDeleted
1 'Padre' Nulo 0
2 'Niño1' 1 0
3 'Niño2' 1 0
4 'Niño4' 2 0
5 'Niño5' 3 0
6 'niño6' 4 0
7 'Niño7' 6 0

El Paramater obtiene los valores:

@ServiceProviderId = 1 @CarmakerId = 5

El procedimiento inserte el ServiceProviderId 7, 6, 4 y 2 en CarmakerPartnerShip pero no inserte 3 y 5.

¿Alguien tiene una idea de por qué el bucle recursivo salta a través de los hijos de ServiceProviderId = 2 pero no salta a través de los hijos de ServiceProviderId = 3?

¡Gracias por tu ayuda y perdón por mi mal inglés!

Si tiene preguntas, puede preguntarme.

Atentamente

Alex

Respuestas a la pregunta(1)

Su respuesta a la pregunta