PDA

View Full Version : سوال: حذف چند رکورد در یک جدول بصورت بازگشتی



kabotareazad
سه شنبه 23 شهریور 1389, 13:17 عصر
یک جدول دارم حاوی یکسری دسته و زیر دسته. این دسته ها می توانند زیر مجموع هم قرار بگیرند در چند سطح مثلا

دسته 1
--- دسته 11
--- دسته 12
دسته 2
--- دسته 21
--- --- دسته 211

با استفاده از trigger عمل حذف بازگشتی رو انجام دادم به صورت زیر:


CREATE trigger [dbo].[tr_DeleteCategory]
on [dbo].[Categories]
for delete
as
begin
delete dbo.Categories
from dbo.Categories tbl1 join DELETED trig1
on tbl1.Parent = trig1.DownloadCatID
endاما، فقط تا یک سطح عمل حذف رو انجام می ده!
کسی می تونه کمک کنه؟

kabotareazad
چهارشنبه 31 شهریور 1389, 16:18 عصر
ظاهران هیچکس نمی دونه این کار چطور انجام میشه؟

raziee
چهارشنبه 31 شهریور 1389, 17:16 عصر
شما فقط کافیه که فیلد Parent رو با ID ارتباط بدید و Delete Role رو براش تعریف کنید.
هر وقت که یک رکورد از این جدول حذف بشه، تمامی زیر مجموعه ها هم از بین خواهند رفت.

NR_Nazifi
پنج شنبه 01 مهر 1389, 10:22 صبح
نه این کار که شما میگید جواب نمی ده!
من این راه رو قبلا امتحان کرده بودم جواب نداد چون زمانی که ارتباط بین دو فیلد در یک جدول باشد delete rule غیر فعال می شه
:خجالت:

kabotareazad
پنج شنبه 01 مهر 1389, 11:06 صبح
شما فقط کافیه که فیلد Parent رو با ID ارتباط بدید و Delete Rule رو براش تعریف کنید.
هر وقت که یک رکورد از این جدول حذف بشه، تمامی زیر مجموعه ها هم از بین خواهند رفت.

سلام
این کاری که شما گفتین رو انجام دادم ولی نشد

persian_bigboy
پنج شنبه 01 مهر 1389, 11:11 صبح
سلام . فکر میکنم شما باید ارتباطات رو از ته به سر حذف کنی . و قبلش باید بایک while تمام زیر سیستم ها رو پیدا کنی و بعدش به این صورت ذخیره و سپس حذف کنی
نحوه ذخیره اعداد :
1,2,3,4,5
و نحوه حذف :
Delete From tblGroup Where ID IN (1,2,3,4,5)

NR_Nazifi
پنج شنبه 01 مهر 1389, 11:58 صبح
اره این ایده خوبیه اما یک مشکلی که داره اینه که اگر تعداد سطوح زیاد بشه ترانزاکشن با sql زیاد میشه که میتونه سرعت پایین بیاره!

البته من نمی دونم چرا trigger بالا جواب نمی ده ولی فکر می کنم بشه با store procedure ها بصورت بازگشتی نوشت و یا همین کاری که دوستمون میگن را با store procedure انجام داد اینطوری بار کمتری بروی سرور ایجاد میشه!!!

persian_bigboy
پنج شنبه 22 مهر 1389, 18:12 عصر
NR_Nazifi (http://www.barnamenevis.org/forum/member.php?u=152970) سلام . نظر شما محترم و خیلی خوبه . من فقط دستور رو نوشتم و نخواستم که دیگه تا آخرش رو بگم تا کمی دوستمون خودش تحقیق کنه . التبه من تا 300 رکورد رو تست کردم در پروژه های بزرگ مثل دبیرخانه و ... که خیلی تراکنش سیستم بالاست مشکلی برای سیستم نداشت . مگه چند بار در روز گروهی حذف کنه ؟ یا چند رکورد رو ؟

majnun
جمعه 23 مهر 1389, 01:59 صبح
وقتی بین دو جدول رابطه برقرار میشه همون ریلیشن شما میتونید تعیین کنید که اگر اصلی حذف شد تمام زیر شاخه ها حذف بشه

دیگه نیازی به کد نویسی اضافه نیست هست ؟