CTE, чтобы получить всех детей (потомков) родителей

мы эту проблемуу меня болит голова ...

Скажи яу нас есть таблица с несколькими тысячами строк, и структура таблицы состоит из родительского элемента -> детские отношения.

Отношения могут идти до 6 уровней. Вот's образец структуры таблицы:

ProductId | ParentId | Levels
1174           0        1174
311           1174      311, 1174
1186          311       1186, 311, 1174
448           1186      448, 1186, 311, 1174
3365          448       3365, 448, 1186, 311, 1174

У нас есть процесс, который проходит через всю таблицу, чтобы получить отношения и сохраняет "уровни» столбец, этот процесс очень медленно (из-за петель), и ямы пытались установить отношения, но потерпели неудачу.

Пока ямы пробовали это, но это не такделать то, на что я надеялся, а также, похоже, реплицировать строки ...

;With Parents(ProductId, ParentId, Levels)
As(
  Select ProductId, ParentId, Levels
  From Products
  Where ParentId = 0 
  Union All
  Select p.ProductId, p.ParentId, p.Levels
  From Products p
  Join Parents cte On cte.ProductId = p.ParentId
)
Select *
From Parents

Как я упоминал ранее, у нас есть процесс, который зацикливает таблицу, он выполняет свою работу, но это может занять до 30 минут, мой вопрос, есть ли лучший способ сделать это? я знаю, что CTE позволяет мне это делать, но я отстой, и столбец уровней должен быть рассчитан и обновлен в таблице, это возможно?

Вот'сSqlfiddle в случае, если кто-то может помочь, спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос