Ich bekomme immer wieder eine max recursion error
Frage.
Zuerst dachte ich, es liege daran, dass eine Null zurückgegeben wurde, und dann würde versucht, die Nullwerte zu ermitteln, die den Fehler verursacht haben. Ich habe meine Abfrage jedoch neu geschrieben, damit keine Nullen zurückgegeben werden und der Fehler weiterhin auftritt.
Was wäre der beste Weg, um diese Funktion neu zu schreiben, damit der Fehler nicht auftritt
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
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
Antworten:
Geben Sie die MAXRECURSION Option am Ende der Abfrage:
Auf diese Weise können Sie festlegen, wie oft der CTE wiederholt werden kann, bevor ein Fehler generiert wird. Maxrecursion 0 ermöglicht eine unendliche Rekursion.
quelle
Dies ist nur ein Beispiel, um einen maximalen Rekursionsfehler zu vermeiden. wir müssen die Option verwenden (maxrecursion 365); oder Option (maxrecursion 0);
quelle