Lo podrías lograr partiendo con una tabla de apoyo donde vayas insertando y marcando los datos que tienes.
Supongamos que dicha tabla tiene el ID del registro y un campo bTrabajo de tipo BIT (Cuando = 1 entonces ya se han insertado sus hijos)
Por ejemplo (Suponiendo que la tabla real se llama TABLADATOS):
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
Ya he hecho cosas de este estilo y este método va muy bien ya que puedes tener niveles infinitos, espero haberme explicado bien.
Saludos,