SQL With(再帰CTEクエリ)
900 ワード
再帰CTEの組み合わせが正しくない場合、無限ループを引き起こす可能性があります.たとえば、再帰メンバー・クエリー定義が親カラムと子カラムに同じ値を返す場合、無限ループが発生します.MAXRECURSIONプロンプトおよびINSERT、UPDATE、DELETE、またはSELECT文のOPTION句のうちの1つの0から32767までの値を使用して、特定の文で許容される再帰級数を制限し、無限ループが発生しないようにすることができます.これにより,ループを生成するコード問題を解決する前に文の実行を制御することができる.サーバ範囲のデフォルト値は100です.0を指定した場合、制限はありません.文ごとに1つのMAXRECURSION値しか指定できません.詳細については、クエリー・プロンプト(Transact-SQL)を参照してください.
例:
例:
USE AdventureWorks;
GO
--Creates an infinite loop
WITH cte (EmployeeID, ManagerID, Title) as
(
SELECT EmployeeID, ManagerID, Title
FROM HumanResources.Employee
WHERE ManagerID IS NOT NULL
UNION ALL
SELECT cte.EmployeeID, cte.ManagerID, cte.Title
FROM cte
JOIN HumanResources.Employee 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);
GO