powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выявить нарушение иерархии иерархической табличке ms sql?
18 сообщений из 18, страница 1 из 1
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917596
zorlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть табличка, где есть иерархическая структура с id и parent. Также в этой табличке есть столбец assigneeName (ФИО руководителя). Если выполнять иерархический запрос по каждому из руководителей (ограничивая в условии where) - запрос выполняется корректно по всем ФИО, кроме трёх. Подскажите, как можно было бы посмотреть, в каком месте нарушается иерархия? Пример запроса привожу ниже:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH Recursive1 (id, parent, pid, name, parentCode, assigneeName)
AS
(
    SELECT id, parent, pid, name, parentCode, assigneeName
    FROM [jira_db].[dbo].[bi_zv_main] e
    WHERE e.assigneeName = N'Нестеров Николай'  
    UNION ALL
    SELECT e.id, e.parent, e.pid, e.name, e.parentCode, e.assigneeName
    FROM [jira_db].[dbo].[bi_zv_main] e
        JOIN Recursive1 r ON e.parent = r.id
)
SELECT distinct (id), parent, pid, name, parentCode, assigneeName
FROM Recursive1 r;
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917628
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угадай мелодию или 5 из 36?

Ты, страдалец, как определил что "некорректно на троих"?
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917733
zorlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Если в условии where указать всех, кроме этих троих (WHERE e.assigneeName in ()), то запрос рано или поздно отработает. Если добавить этих троих или просто выполнить с одним из проблемных (как указано ниже) - запрос выдаёт ошибку:

"Сообщение 530, уровень 16, состояние 1, строка 35
The statement terminated. The maximum recursion 100 has been exhausted before statement completion."
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917742
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zorlo,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH Recursive1 (id, parent, pid, name, parentCode, assigneeName)
AS
(
    SELECT id, parent, pid, name, parentCode, assigneeName
    FROM [jira_db].[dbo].[bi_zv_main] e
    WHERE e.assigneeName = N'Нестеров Николай'  
    UNION ALL
    SELECT e.id, e.parent, e.pid, e.name, e.parentCode, e.assigneeName
    FROM [jira_db].[dbo].[bi_zv_main] e
        JOIN Recursive1 r ON e.parent = r.id
)
SELECT distinct (id), parent, pid, name, parentCode, assigneeName
FROM Recursive1 r
OPTION(MAXRECURSION 0);



так пробовали ?
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917918
zorlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
entrypoint,

Не, OPTION(MAXRECURSION 0) не помогало, знаю про эту тему. Запрос просто уходил в бесконечное время.
Я вычислил на каких id ошибка. Выявил 3 id, где parent должен быть NULL, а стоял id. Подменил на Null - всё взлетело.

В любом случае большое спасибо за помощь.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917923
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zorlo
Подскажите, как можно было бы посмотреть, в каком месте нарушается иерархия?

Смысл? Просто добавьте в рекурсивную часть условие, что выбираемая запись отсутствует в CTE среди уже отобранных записей.

А для выявления - добавить поле-флаг, и вместо отказа, когда выбираемая запись уже есть, помечать в нём, а вот уже по этой пометке - не обрабатывать на следующем витке. Так в список попадут записи, начав от которых, можно получить всё кольцо, и найти ту запись кольца, в которой косяк (в общем случае такую запись можно найти только вручную - вернее, решить, что вот именно эта запись кольца косячная).
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917934
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint,

поищите по форуму, где пролетал код поиска петель-замыканий в дереве.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917975
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Владислав Колосов
entrypoint,

поищите по форуму, где пролетал код поиска петель-замыканий в дереве.


Зачем ?

у человека ошибка

zorlo

"Сообщение 530, уровень 16, состояние 1, строка 35
The statement terminated. The maximum recursion 100 has been exhausted before statement completion."


выбрано возможное количество итераций, а не зацикливание

возможно после этого 22065041 что-нибудь и прояснилось, но до этого - никаких других сведений не было
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39917991
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
выбрано возможное количество итераций, а не зацикливание
Так потому и выбрано, что он по кругу бегает и одни и те же записи мульён раз выбирает...
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39918013
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Akina
записи мульён раз выбирает...

Приведённый скрипт позволяет сделать всего 100 итераций

Akina
он по кругу бегает

Откуда это Вам известно, если автор не предоставил данные для которых возникает эта ошибка ?

А так если в таблице циклические ссылки ... то (((
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39918062
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint
Akinaон по кругу бегает

Откуда это Вам известно, если автор не предоставил данные для которых возникает эта ошибка ?Потому что автор про это написал, в итоге: 22065297
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39918286
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint , что-то Вас, друг мой, несёт.

Сначала товарищ говорит
zorlo
Если добавить этих троих или просто выполнить с одним из проблемных (как указано ниже) - запрос выдаёт ошибку:

"Сообщение 530, уровень 16, состояние 1, строка 35
The statement terminated. The maximum recursion 100 has been exhausted before statement completion."

Дальше он снимает ограничение по глубине рекурсии по чьему-то явно "вредному совету" (каковой, вообще говоря, бред, ибо такой вложенности в "иерархии руководителей" - а именно так определена предметная область запроса,- быть не может, и, следовательно, имеет место зацикливание), и вполне ожидаемо двумя постами ниже сообщает, что получил
zorlo
OPTION(MAXRECURSION 0) не помогало, знаю про эту тему. Запрос просто уходил в бесконечное время.

Или, иными словами, в бесконечную рекурсию. Каковая и бывает исключительно в случае кольцевых ссылок и без ограничения на глубину рекурсии.

Так что за хронологией следить надо всем, а не только нам.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39918298
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zorlo,

Соберите строковую цепочку снизу вверху. -01-02-03-04- и по ней смотрите. Если хотите, чтобы написал, дайте тестовые данные.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39918323
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Остапы! Вас понесло. Ведите себя дружно. И прекратите обсуждать участников форума вместо темы топика. Все равно все потру.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39918659
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint,

там бесконечный цикл, читайте внимательно все сообщения автора.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39919000
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39919038
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
entrypoint,

там бесконечный цикл, читайте внимательно все сообщения автора.


Соберите строковую цепочку снизу вверху. -01-02-03-04- и по ней смотрите. В ТОМ ЧИСЛЕ ПО НЕЙ ОСТАНОВИТЕ БЕСКОНЕЧНЫЙ ЦИКЛ.
...
Рейтинг: 0 / 0
Как выявить нарушение иерархии иерархической табличке ms sql?
    #39919549
nullin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если на sql.ru в поиск вбить ни дерево, ни граф, ни даже список во вьюху, а тупо рекурсивный запрос, будет просто ворох тем, в которых были даны ответы и на такие сложности, как у ТС. Я уже молчу о том, что будет если через Яндекс поискать: t-sql рекурсия site:sql.ru!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выявить нарушение иерархии иерархической табличке ms sql?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]