sql - terminada - La recursión máxima 100 se ha agotado antes de completar la declaración
la declaración terminó la recursión máxima 100 se ha agotado antes de completar la declaración (2)
Sigo recibiendo un max recursion error
con esta consulta.
Al principio pensé que era porque se devolvía un nulo y luego intentaría hacer coincidir los valores nulos que causaban el error, sin embargo, reescribí mi consulta para que no se devolvieran los nulos y el error aún ocurra.
¿Cuál sería la mejor manera de reescribir esta función para que el error no ocurra?
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
Especifique la opción maxrecursion al final de la consulta:
...
from EmployeeTree
option (maxrecursion 0)
Eso le permite especificar con qué frecuencia el CTE puede recurse antes de generar un error. Maxrecursion 0 permite la recursión infinita.
es solo una muestra para evitar el máximo error de recursión. tenemos que usar la opción (maxrecursion 365); u opción (maxrecursion 0);
DECLARE @STARTDATE datetime;
DECLARE @EntDt datetime;
set @STARTDATE = ''01/01/2009'';
set @EntDt = ''12/31/2009'';
declare @dcnt int;
;with DateList as
(
select @STARTDATE DateValue
union all
select DateValue + 1 from DateList
where DateValue + 1 < convert(VARCHAR(15),@EntDt,101)
)
select count(*) as DayCnt from (
select DateValue,DATENAME(WEEKDAY, DateValue ) as WEEKDAY from DateList
where DATENAME(WEEKDAY, DateValue ) not IN ( ''Saturday'',''Sunday'' )
)a
option (maxrecursion 365);