O problema fundamental com as listas de adjacência é que não existe uma maneira geral no SQL de extrair uma subárvore inteira, então você já tem um problema de identificar todas as linhas que precisa duplicar sem recorrer a um cursor.
Se possível, migre sua lista de adjacências para um modelo de conjunto aninhado que permita identificar facilmente todos os nós de uma subárvore. No entanto, a manutenção de um modelo de conjunto aninhado é mais complexa para inserções e exclusões gerais.
EDIT:Conforme apontado por 'a_horse_with_no_name', existe uma maneira no SQL geral de processar listas de adjacências, expressões recursivas de tabelas comuns.