SQL Server 2008에서보기를 저장하려고하면 "OPTION '키워드 근처에"구문이 잘못되었습니다. "라는 오류 메시지가 나타납니다. 끝에 MAXRECURSION 옵션을 추가하려고합니다. 내 공통 테이블 식. 이전에 작성한 CTE를 본 모든 사례는 CTE의 끝에서 "OPTION (MAXRECURSION 0)"에 신경 쓰지 않습니다.CTE 문에서 키워드 'OPTION'근처에 잘못된 구문이 있음
누구나 왜이 오류가 발생하는지 알 수 있습니까? CTE는 OPTION 절없이 작동하지만 최대 재귀 횟수 (100)에 도달합니다.
WITH CTE AS
(
SELECT
CDay,
InvAcct,
BuyerCode,
PartNumber,
ROP,
ROP_ROQ,
DailyDemand,
StartingInvQty,
SchedDeliveryQty,
CAST(StartingInvQty - DailyDemand/2.0 AS decimal(18,4)) AS ProjInvQty
FROM
qryInventorySimulation
WHERE
MBC = 'B' AND
CDay = CAST(CAST(GETDATE()AS date) as datetime)
UNION ALL
SELECT
qryInventorySimulation.CDay,
qryInventorySimulation.InvAcct,
qryInventorySimulation.BuyerCode,
qryInventorySimulation.PartNumber,
qryInventorySimulation.ROP,
qryInventorySimulation.ROP_ROQ,
qryInventorySimulation.DailyDemand,
qryInventorySimulation.StartingInvQty,
qryInventorySimulation.SchedDeliveryQty,
CAST(CTE.ProjInvQty + qryInventorySimulation.SchedDeliveryQty - qryInventorySimulation.DailyDemand AS decimal(18,4)) AS ProjInvQty
FROM
qryInventorySimulation INNER JOIN CTE ON qryInventorySimulation.InvAcct = CTE.InvAcct AND qryInventorySimulation.PartNumber = CTE.PartNumber AND qryInventorySimulation.CDay = DATEADD(d,1,CTE.CDay)
WHERE
qryInventorySimulation.CDay <= DATEADD(d,120,GETDATE())
)
SELECT * FROM CTE
OPTION (MAXRECURSION 0);
당신의 사려 깊은 설명과 예를 보여 주셔서 감사합니다. 그러나 저는 여전히 제 상황에 그것을 적용하는 데 어려움을 겪고 있습니다. 나는 내 CTE를 가져 와서 별도의보기 (예 : "V"라고 부름)로 저장했습니다. 그런 다음 다른보기를 다음과 같이 만들었습니다. 'SELECT * FROM V OPTION (MAXRECURSION 0);' 새 뷰를 저장하려고해도 "키워드 OPTION 근처에서 구문이 잘못되었습니다"라는 동일한 문제가 있습니다. 나는 이것이 당신의 본을 따른다고 생각했습니다. 내가 도대체 뭘 잘못하고있는 겁니까? – user3585730
또한 저장 프로 시저 내에서 CTE 정의의 끝에 추가하면 MAXRECURSION 옵션이 허용된다는 사실을 확인했습니다. 그것은 전망 안에서 받아 들여지지 않을 것입니다. 저장 프로 시저 내에서 받아 들여지더라도 최대 재귀 횟수에는 영향을주지 않습니다. 기묘한. – user3585730
"* 다음과 같이 다른 뷰를 만들었습니다 : SELECT * FROM V OPTION (MAXRECURSION 0);하지만 여전히 같은 문제"* - 이것은 놀랍습니까? 조회 힌트를 적용 할 수없는보기를 몇 번이나 중첩했는지는 중요하지 않습니다. 그 자체로 전체 쿼리가 아니기 때문에 힌트를 가질 수 없습니다. – GarethD