PDA

View Full Version : ایجاد قابلیت Cascade روی جداولی که دارای ارتباط Self Join هستند



morteza57
جمعه 16 مرداد 1388, 12:51 عصر
سلام.
جدولی دارم که حاولی اطلاعات نود های یک درخت هست. این جدول دارای یک رابطه Self Join هست و در حقیقت اطلاعات رو به صورت سلسله مراتبی نگهداری می کنه و مشخص می کنه که کدوم نود ها پدر نود های دیگه هستند.
متاسفانه ایجاد Casecade روی رابطه های Self Join امکان پذیر نیست و من نیاز دارم که این قابلیت رو روی جدول بگذارم.
به عبارت دیگه می خوام که هنگامی که یک نود پدر از جدول حذف می شه به طور اتوماتیک نودهای فرزند اون هم حذف بشند.
یکی از راه های دستی اینه که نود ها رو یکی یکی از پایین به بالا حذف کنم که کار پر درد سری هستش.
دوستان کسی راه بهتری در این زمینه سراغ داره؟
متشکرم

meysam_pro
جمعه 16 مرداد 1388, 13:51 عصر
یک تریگر بسازین از نوع After و وقتی یک نود پاک میشه کدش رو بر دارین.
خب حالا باید به اندازه عمق بعد از این گره دستور Delete تولید کنید. مثلا واسه یک ردیف

delete from tblTest where #p IN (select * from tblTest where #PNode=p)
p رو هم قبلا از جدول Deleted خوندی.

morteza57
شنبه 17 مرداد 1388, 00:48 صبح
متشکرم، البته مشکل من بیشتر مربوط به دستیابی به نود های پایینتر بود که باید با استفاده از روش های بازگشتی انجام می شد و این کار رو با استفاده از روشی که در مقاله زیر ارائه شده، انجام دادم.

http://www.30sharp.com/ShowArticle.aspx?nid=13&did=116&AuthorID=2

محمد سلیم آبادی
شنبه 17 مرداد 1388, 01:38 صبح
متشکرم، البته مشکل من بیشتر مربوط به دستیابی به نود های پایینتر بود که باید با استفاده از روش های بازگشتی انجام می شد و این کار رو با استفاده از روشی که در مقاله زیر ارائه شده، انجام دادم.

http://www.30sharp.com/ShowArticle.aspx?nid=13&did=116&AuthorID=2

ممنون از لینکتون.

اگر از SQL SERVER 2005 استفاده می کنید روش ساده تر و سریع تر Recursive CTE

می باشد که در پست شماره 2 لینک زیر قابل استفاده است:

http://www.barnamenevis.org/forum/showthread.php?t=172233