大きなレコードを含む CTE クエリがあります。以前は正常に動作していました。しかし最近、一部のメンバーでエラーがスローされます
声明は終了しました。ステートメントが完了する前に、最大再帰回数 100 を使い果たしました。
レコードを制限したくないので、クエリにOPTION (maxrecursion 0)
orを付けます。OPTION (maxrecursion 32767)
ただし、その結果、クエリの読み込みに時間がかかります。これを解決するにはどうすればよいですか?
これが私のコードです:
with cte as(
-- Anchor member definition
SELECT e.SponsorMemberID , e.MemberID, 1 AS Level
FROM tblMember AS e
where e.memberid = @MemberID
union all
-- Recursive member definition
select child.SponsorMemberID , child.MemberID, Level + 1
from tblMember child
join cte parent
on parent.MemberID = child.SponsorMemberID
)
-- Select the CTE result
Select distinct a.*
from cte a
option (maxrecursion 0)
編集:不要なコードを削除して理解しやすくする
解決済み:したがって、問題は から来たものではありませんmaxrecursion
。CTEからです。理由はわかりませんが、おそらくスポンサー サイクルが含まれている可能性があります: A -> B -> C -> A -> ... (@HABO に感謝)
この方法を試してみましたが、うまくいきます。自己参照テーブルを解析するときの CTE の無限ループ