Я продолжаю получать max recursion error
с этим запросом.
Сначала я думал, что это потому, что возвращается ноль, а затем он пытается сопоставить нулевые значения, вызывающие ошибку, однако я переписал свой запрос, чтобы нули не возвращались, и ошибка все еще возникает.
Что было бы лучшим способом переписать эту функцию, чтобы ошибка не возникала
WITH EmployeeTree AS
(
SELECT
EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid,
CASE Employees.APV_MGR_EMP_ID
WHEN Null THEN '0'
ELSE Employees.APV_MGR_EMP_ID
END as ApprovalManagerId
FROM
dbo.[tEmployees] as Employees WITH (NOLOCK)
WHERE
APV_MGR_EMP_ID = @Id
and Employees.APV_MGR_EMP_ID is not null
and Employees.EMP_SRC_ID_NR is not null
UNION ALL
SELECT
EMP_SRC_ID_NR Id, USR_ACV_DIR_ID_TE Uuid,
CASE Employees.UPS_ACP_EMP_NR
WHEN Null THEN '1'
ELSE Employees.UPS_ACP_EMP_NR
END as ApprovalManagerId
FROM
dbo.[tEmployees] as Employees WITH (NOLOCK)
WHERE
UPS_ACP_EMP_NR = @Id
and Employees.APV_MGR_EMP_ID is not null
and Employees.EMP_SRC_ID_NR is not null
UNION ALL
SELECT
Employees.EMP_SRC_ID_NR, Employees.USR_ACV_DIR_ID_TE,
CASE Employees.APV_MGR_EMP_ID
WHEN Null THEN '2'
ELSE Employees.APV_MGR_EMP_ID
END
FROM
dbo.[tEmployees] as Employees WITH (NOLOCK)
JOIN
EmployeeTree ON Employees.APV_MGR_EMP_ID = EmployeeTree.Id
where
Employees.APV_MGR_EMP_ID is not null
and Employees.EMP_SRC_ID_NR is not null
)
SELECT
Id AS [EmployeeId],
Uuid AS [EmployeeUuid],
ApprovalManagerId AS [ManagerId]
FROM EmployeeTree
sql
stored-procedures
common-table-expression
ПОМОГИ МНЕ
источник
источник
COALESCE()
:CASE Employees.APV_MGR_EMP_ID WHEN Null THEN '0' ELSE Employees.APV_MGR_EMP_ID END as ApprovalManagerId
=COALESCE(Employees.APV_MGR_EMP_ID, 0) AS ApprovalManagerID
Ответы:
Укажите параметр maxrecursion в конце запроса:
Это позволяет вам указать, как часто CTE может выполнять рекурсию перед генерацией ошибки. Maxrecursion 0 позволяет бесконечную рекурсию.
источник
это всего лишь пример, чтобы избежать максимальной ошибки рекурсии. мы должны использовать опцию (maxrecursion 365); или опция (maxrecursion 0);
источник