再帰の上限設定

SQL Server では、何も指定しない場合、再帰の上限は 100 が使用される。
これを変更するためにはクエリヒントとして MAXRECURSION を指定する。

WITH
  Seq(n) AS (
    SELECT 1
    UNION ALL
    SELECT
        n + 1
    FROM
        Seq
    WHERE
        n < 150
  )
SELECT * FROM Seq
OPTION (MAXRECURSION 200)

MAXRECURSION には 0〜32,767 を指定することが出来る。
今まで 32,767 が再帰の上限だと思っていたんだけど、0 を指定すると無制限になるということを mi に教えてもらった。

このクエリで許可される最大再帰数を指定します。number は、0 〜 32,767 の負以外の整数です。0 を指定した場合、制限は適用されません。このオプションが指定されない場合、サーバーの既定の上限値である 100 が使用されます。


クエリの実行中に MAXRECURSION の指定した上限値または既定上限値に達した場合、クエリは終了し、エラーが返されます。


このエラーのため、ステートメントのすべての効果がロールバックされます。ステートメントが SELECT ステートメントであった場合、結果の一部が返されるか、結果がまったく返されないかのいずれかになります。結果の一部が返された場合でも、指定した最大再帰レベルを超える再帰レベルのすべての行は含まれていない可能性があります。

クエリ ヒント (Transact-SQL)

ほんとだー!