Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Рекурсивный запрос (The maximum recursion 100)  [new]
unq
Member

Откуда:
Сообщений: 544
Помогите с рекурсивным запросом.
Что делаю не так?

WITH deps AS
    (
        SELECT r.ID,
               ru.UserID,
               r.ParentID,
               r.TypeID
        FROM RoleUsers ru WITH (NOLOCK)
        INNER JOIN Roles r WITH(NOLOCK)
            ON r.ID = ru.ID
        INNER JOIN DepartmentRoles dr WITH(NOLOCK)
            ON dr.ID = r.ID
        WHERE ru.UserID = '3db19fa0-228a-497f-873a-0250bf0a4ccb'
        UNION ALL
        SELECT d.ID,
               d.UserID,
               d.ParentID,
               d.TypeID
        FROM deps d
        JOIN Roles r WITH(NOLOCK)
        ON r.ParentID = d.ID
    )
SELECT * FROM deps


Выдает 100 одинаковых строк и ошибку
[23000][530] The statement terminated. The maximum recursion 100 has been exhausted before statement completion.


Сообщение было отредактировано: 11 ноя 20, 13:45
11 ноя 20, 13:45    [22230111]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос (The maximum recursion 100)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8047
unq,

Петли в запросе, например. Где видно, что в первом запросе выбираются корневые элементы?
11 ноя 20, 13:50    [22230114]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос (The maximum recursion 100)  [new]
invm
Member

Откуда: Москва
Сообщений: 9489
WITH deps AS 
    (
        SELECT r.ID,
               ru.UserID,
               r.ParentID,
               r.TypeID
        FROM RoleUsers ru WITH (NOLOCK)
        INNER JOIN Roles r WITH(NOLOCK)
            ON r.ID = ru.ID
        INNER JOIN DepartmentRoles dr WITH(NOLOCK)
            ON dr.ID = r.ID
        where r.ParentID is null
        UNION ALL
        SELECT d.ID,
               d.UserID,
               d.ParentID,
               d.TypeID
        FROM deps d
        JOIN Roles r WITH(NOLOCK)
        ON r.ParentID = d.ID
    )
SELECT * FROM deps WHERE deps.UserID = '3db19fa0-228a-497f-873a-0250bf0a4ccb'
11 ноя 20, 13:53    [22230121]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос (The maximum recursion 100)  [new]
unq
Member

Откуда:
Сообщений: 544
invm,

Оно!))
Спасибо!!!
11 ноя 20, 13:58    [22230123]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить