我有 CTE 查询,上面有大量记录。以前它工作得很好。但是最近,它为某些成员抛出了错误
声明终止。在语句完成之前,最大递归 100 已用完。
所以我把OPTION (maxrecursion 0)
或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 中的无限循环