當我們使用如下遞歸時:
-Creates an infinite loop
WITH cte (EmployeeID, ManagerID, Title) as
(
SELECT EmployeeID, ManagerID, Title
FROM dbo.MyEmployees
WHERE ManagerID IS NOT NULL
UNION ALL
SELECT cte.EmployeeID, cte.ManagerID, cte.Title
FROM cte
JOIN dbo.MyEmployees AS e
ON cte.ManagerID = e.EmployeeID
)
--Uses MAXRECURSION to limit the recursive levels to 2
SELECT EmployeeID, ManagerID, Title
FROM cte
OPTION (MAXRECURSION 2);
※:注意
OPTION (MAXRECURSION 2)
服務器範圍的默認值爲 100。如果指定 0,則沒有限制。每一個語句只能指定一個 MAXRECURSION 值使用類似的語句
實例中指定2,則最大隻能進行2層遞歸。
如果該項未指定,則服務器使用默認值。當遞推層數超過100時,服務器就會報錯。