Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как выявить нарушение иерархии иерархической табличке ms sql? / 18 сообщений из 18, страница 1 из 1
23.01.2020, 00:02
    #39917596
zorlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
Добрый день!
Есть табличка, где есть иерархическая структура с 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
23.01.2020, 05:44
    #39917628
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
Угадай мелодию или 5 из 36?

Ты, страдалец, как определил что "некорректно на троих"?
...
Рейтинг: 0 / 0
23.01.2020, 10:47
    #39917733
zorlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
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
23.01.2020, 10:54
    #39917742
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
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
23.01.2020, 15:02
    #39917918
zorlo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
entrypoint,

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

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

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

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

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

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

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


Зачем ?

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

zorlo

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


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

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

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

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

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

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

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

Откуда это Вам известно, если автор не предоставил данные для которых возникает эта ошибка ?Потому что автор про это написал, в итоге: 22065297
...
Рейтинг: 0 / 0
24.01.2020, 11:35
    #39918286
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
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
24.01.2020, 11:56
    #39918298
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выявить нарушение иерархии иерархической табличке ms sql?
zorlo,

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

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

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


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


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