Что мне делать, когда я делаю максрекурсию с CTE? - PullRequest
2 голосов
/ 24 февраля 2009

У меня есть CTE, который выполняет некоторую рекурсию. Самый простой способ представить проблемное пространство - это резистор, который используется в автомобилях по всему миру, и у вас есть вся эта информация. Резистор A используется в платах B и C, который используется в DashAssembly D, E, F ... ZZ, который используется в автомобилях AAA, AAB и AAC.

Я получил CTE, работающий с одной частью, проверил результаты, все хорошо (используя MAXRECURSION 100). Затем я добавляю часть, которая немного более распространена в деревьях деталей. Бум сломан. Я попытался поднять MAXRECURSION до 32767, и он все еще сломался. Глядя на данные, эта конкретная часть используется повсеместно. На втором уровне рекурсии у него 426 родителей. И так далее, я думаю, 6 уровней рекурсии. Это имеет смысл (я думаю), что это взрыв MAXRECURSION.

Следующий вопрос: каков план Б? Я никогда не делал рекурсии, в которых не использовались бы CTE.

Обновление : ответ таков: убедитесь, что у вас нет циклических ссылок, и убедитесь, что ваша таблица рекурсии правильно фильтрует свое соединение (я не выполнил второе правильно). По сути, я обманывала и думала, что моя проблема заключалась в моих безумных диких данных, тогда как вместо этого были мои дурацкие навыки sql.

1 Ответ

1 голос
/ 24 февраля 2009

Чаще всего, если вы достигаете предела рекурсии, вы увеличиваете предел до $ BIGNUM и продолжаете его использовать, это означает, что у вас есть циклическая ссылка.

Вы должны убедиться, что у вас нет циклических ссылок и что ваша таблица рекурсии фильтруется правильно.

...