DECLARE @Apoyo TABLE (idRegistro INT NOT NULL PRIMARY KEY, bTratado NOT NULL DEFAULT 0, bNuevo NOT NULL DEFAULT 1)
INSERT INTO @Apoyo (idRegistro) VALUES (1) -- Aquí habría que hacer la primera INSERT (el/los padres de todos los demás)
WHILE EXISTS (SELECT TOP 1 1 FROM @Apoyo WHERE bTratado = 0 AND bNuevo = 1)
BEGIN
UPDATE @Apoyo SET bNuevo = 0 WHERE bTratado = 0
INSERT INTO @Apoyo (idRegistro) SELECT idRegistro FROM TablaDatos A INNER JOIN @Apoyo B ON A.idSiguienteComponente = B.idRegistro WHERE B.bTratado = 0 AND B.bNuevo = 0
UPDATE @Apoyo SET bTratado = 1 WHERE bNuevo = 0
END