Nieskończona pętla CTE z opcją (maxrecursion 0)
Mam zapytanie CTE z dużym rekordem. Wcześniej działało dobrze. Ale ostatnio rzuca błąd dla niektórych członków
Oświadczenie zostało zakończone. Maksymalna rekursja 100 została wyczerpana przed zakończeniem instrukcji.
Więc umieściłemOPTION (maxrecursion 0)
lubOPTION (maxrecursion 32767)
na moje zapytanie, ponieważ nie chcę ograniczać rekordów. Ale rezultat jest taki, że ładowanie trwa wiecznie. Jak to rozwiązać?
Oto mój kod:
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)
EDYTOWAĆ: usuń niepotrzebny kod, aby go łatwo zrozumieć
ROZWIĄZANY: Więc problem nie pochodzimaxrecursion
. To z CTE. Nie wiem dlaczego, ale może zawierać cykle sponsora: A -> B -> C -> A -> ... (dzięki @HABO)
Próbowałem tej metody i działa.Nieskończona pętla w CTE podczas analizowania tabeli odwołującej się do siebie