Je reçois toujours un max recursion error
avec cette requête.
Au début, je pensais que c'était parce qu'un null était renvoyé, puis il essaierait de faire correspondre les valeurs nulles à l'origine de l'erreur.Cependant, j'ai réécrit ma requête pour que les valeurs nulles ne soient pas renvoyées et que l'erreur se produise toujours.
Quelle serait la meilleure façon de réécrire cette fonction, afin que l'erreur ne se produise pas
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
AIDEZ MOI
la source
la source
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
Réponses:
Spécifiez l' option maxrecursion à la fin de la requête:
Cela vous permet de spécifier à quelle fréquence le CTE peut récurer avant de générer une erreur. Maxrecursion 0 permet une récursion infinie.
la source
ce n'est qu'un exemple pour éviter une erreur de récursivité maximale. nous devons utiliser l' option (maxrecursion 365); ou option (maxrecursion 0);
la source