Я ничего не знаю о средствах защиты от наводнений. Но я бы взял первое средство. И используйте временную таблицу и цикл while для генерации пути.
-- Pseudo Code
TempTable (LastNode, CurrentNode, N)
DECLARE @intN INT
SET @intN = 1
INSERT INTO TempTable(LastNode, CurrentNode, N)
-- Insert first item in list with no up stream items...call this initial condition
SELECT LastNode, CurrentNode, @intN
FROM your table
WHERE node has nothing upstream
WHILE @intN <= 3500
BEGIN
SEt @intN = @intN + 1
INSERT INTO TempTable(LastNode, CurrentNode, N)
SELECT LastNode, CurrentNode, @intN
FROM your table
WHERE LastNode IN (SELECT CurrentNode FROM TempTable WHERE N = @intN-1)</p>
IF @@ROWCOUNT = 0
BREAK
END
Если предположить, что каждый узел указывает на одного потомка. Тогда это должно занять не более 3500 итераций. Если несколько узлов имеют одного и того же восходящего провайдера, это займет меньше времени. Но что еще более важно, это позволяет вам сделать это ...
SELECT LastNode, CurrentNode, N
ОТ TempTable
ЗАКАЗАТЬ НА N
И это позволит вам увидеть, есть ли какие-либо петли или какие-либо другие проблемы с вашим провайдером. Между прочим, 3500 строк - это не так много, поэтому даже в худшем случае, когда каждый поставщик указывает на другого восходящего поставщика, это не должно занять много времени.