2
當我嘗試在SQL Server 2008中保存視圖時,出現「關鍵字'OPTION''附近有錯誤的語法」錯誤。我正在嘗試將MAXRECURSION選項添加到我的共同表格表達。我之前創建的所有示例以及正在運行的CTE都不介意CTE末尾的「OPTION(MAXRECURSION 0)」。在CTE聲明中關鍵字'OPTION'附近的語法不正確
任何人都明白爲什麼我會收到此錯誤?儘管CTE達到了遞歸的最大數量(100),但CTE沒有使用OPTION子句。
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);' 但是,當我去保存新視圖時仍存在同樣的問題:「關鍵字選項附近的語法錯誤」。我認爲這是你的榜樣。我究竟做錯了什麼? – user3585730
我還注意到,如果將MAXRECURSION選項添加到存儲過程中的CTE定義的末尾,則可接受該選項。它不會在視圖內被接受。雖然它在存儲過程中被接受,但它對遞歸的最大數量沒有任何影響。奇怪的。 – user3585730
「*然後我創建了另一個視圖,如下所示:'SELECT * FROM V OPTION(MAXRECURSION 0);'但仍然是同樣的問題」* - 這是否令人驚訝?無論您嵌套視圖多少次,都無法將查詢提示應用於該視圖。它本身並不是一個完整的查詢,因此不能有提示。 – GarethD