جلوگیری از حلقه بی نهایت در کوئری بازگشتی SQL Server

mohsen9 ماه قبل
ارسال شده در
mohsen
      with  p as (
	select id, parent_id, JSON_MODIFY('[]', 'append $', cast(id as nvarchar)) as path from t_content where id = 168401 -- initial
	union all
	select ps.id, ps.parent_id, JSON_MODIFY(p.path, 'append $', CAST(ps.id as nvarchar)) as path from t_content ps
	inner join p on p.parent_id= ps.id
	where ps.id not in (select j.value from openjson(p.path, '$') j)
)
SELECT *
FROM p
where parent is null;
    

در این کوئری می خوایم از فرزند به پدر برسیم با فرض اینکه ممکن است رابطه در چرخه بینهایت بیفتد:

A -> B -> C -> A

برای جلوگیری از این کار مسیر را در آرایه جاوااسکریپتی ذخیره می کنیم و در صورتی به عملیات بازگشتی ادامه می دهیم که آیتم دیده شده را دوباره نبینیم

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!