2 回答

TA貢獻1851條經(jīng)驗 獲得超5個贊
如果您要達到遞歸限制,那么您可能在贊助關(guān)系或數(shù)據(jù)循環(huán)方面有相當(dāng)大的深度。如下所示的查詢將檢測循環(huán)并終止遞歸:
declare @tblMember as Table ( MemberId Int, SponsorMemberId Int );
insert into @tblMember ( MemberId, SponsorMemberId ) values
( 1, 2 ), ( 2, 3 ), ( 3, 5 ), ( 4, 5 ), ( 5, 1 ), ( 3, 3 );
declare @MemberId as Int = 3;
declare @False as Bit = 0, @True as Bit = 1;
with Children as (
select MemberId, SponsorMemberId,
Convert( VarChar(4096), '>' + Convert( VarChar(10), MemberId ) + '>' ) as Path, @False as Loop
from @tblMember
where MemberId = @MemberId
union all
select Child.MemberId, Child.SponsorMemberId,
Convert( VarChar(4096), Path + Convert( VarChar(10), Child.MemberId ) + '>' ),
case when CharIndex( '>' + Convert( VarChar(10), Child.MemberId ) + '>', Path ) = 0 then @False else @True end
from @tblMember as Child inner join
Children as Parent on Parent.MemberId = Child.SponsorMemberId
where Parent.Loop = 0 )
select *
from Children
option ( MaxRecursion 0 );

TA貢獻2036條經(jīng)驗 獲得超8個贊
因此問題不是來自maxrecursion
。來自CTE。我不知道為什么,但是可能包含任何贊助者周期:A-> B-> C-> A-> ...(
- 2 回答
- 0 關(guān)注
- 1089 瀏覽
添加回答
舉報