Eu continuo recebendo um max recursion error
com esta consulta.
No começo, pensei que fosse porque um nulo estava sendo retornado e, em seguida, tentaria corresponder aos valores nulos que causavam o erro. No entanto, reescrevi minha consulta para que nulos não fossem retornados e o erro ainda ocorre.
Qual seria a melhor maneira de reescrever essa função, para que o erro não ocorra
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
AJUDE-ME
fonte
fonte
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
Respostas:
Especifique a opção maxrecursion no final da consulta:
Isso permite que você especifique com que frequência o CTE pode se recuperar antes de gerar um erro. Maxrecursion 0 permite recursão infinita.
fonte
é apenas uma amostra para evitar erro máximo de recursão. nós temos que usar a opção (maxrecursion 365); ou opção (maxrecursion 0);
fonte