[SQL] 최대 재귀 (100)는 문이 완료되기 전에 소진 된
SQL최대 재귀 (100)는 문이 완료되기 전에 소진 된
나는이 쿼리 최대 재귀 오류가 계속.
처음에 나는 널이 반환되고 있었기 때문에 그것이 한 후 시도하고 null을 반환하고 오류가 계속 발생되지 않도록 오류가 있지만, 내 쿼리를 재 작성의 원인이 널 값과 일치 거라 생각 했어요.
어떻게하면 오류가 발생하지 않도록하는 것이,이 기능을 다시 작성하는 가장 좋은 방법이 될 것입니다
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
해결법
-
==============================
1.쿼리의 끝에서 MAXRECURSION 옵션을 지정합니다 :
쿼리의 끝에서 MAXRECURSION 옵션을 지정합니다 :
... from EmployeeTree option (maxrecursion 0)
즉 당신은 CTE가 오류를 생성하기 전에 재귀 횟수를 지정할 수 있습니다. MAXRECURSION 0은 무한 순환을 허용한다.
-
==============================
2.최대 재귀 오류를 방지하기 위해 단지 샘플입니다. 우리가 사용하는 옵션 (MAXRECURSION 365)에있다; 또는 옵션 (MAXRECURSION 0);
최대 재귀 오류를 방지하기 위해 단지 샘플입니다. 우리가 사용하는 옵션 (MAXRECURSION 365)에있다; 또는 옵션 (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);
from https://stackoverflow.com/questions/9650045/the-maximum-recursion-100-has-been-exhausted-before-statement-completion by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 조건 고유 제한 조건 (0) | 2020.04.10 |
---|---|
[SQL] 나는 SELECT 쿼리에서 계산 필드를 다시 사용할 수 있습니까? (0) | 2020.04.09 |
[SQL] MS Access 테이블로 내보내기 데이터를 엑셀 VBA를 사용하여 (0) | 2020.04.09 |
[SQL] 엑셀 함수는 워크 시트 데이터에 대한 쿼리 SQL-처럼 만들어? (0) | 2020.04.09 |
[SQL] MySQL은 달과 연도 별 그룹 (0) | 2020.04.09 |