PDA

View Full Version : حذف رکوردها به شکل بازگشتی



viti22
سه شنبه 26 فروردین 1393, 08:17 صبح
سلام دوستان
من یک جدول به شکل زیر دارم:

table (ID, name, parent_ID)

117999

در این جدول ارتباطی از parent_ID به ID وجود داره. در واقع نام پدر هر فرزند (هر رکورد) در parent_ID ذخیره میشه و در صورتی که پدر نداشته باشه parent_ID با Null مقداردهی خواهد شد.

حالا من میخوام یه procedure بنویسم که با حذف یک رکورد همه فرزندان اون رکورد هم حذف شوند. چطوری میتونم این کار رو انجام بدم؟

viti22
سه شنبه 26 فروردین 1393, 13:55 عصر
نمی دونم شاید نتونستم منظورم رو خوب برسونم، ولی خودم یه راه حلی رو تونستم پیدا کنم:

WITH temp(ID) AS ( SELECT @ID
UNION ALL
SELECT [table].ID
FROM [table]
JOIN temp ON [table].parent_ID = temp.ID
)
DELETE [table]
FROM temp
JOIN [table] ON [table].ID = temp.ID

Rejnev
چهارشنبه 27 فروردین 1393, 20:47 عصر
با یک پروسیجر بازگشتی فک میکنم کارتون راه بیفته... البته تا 32 مرحله بیشتر نمیتونه nest بشه:

create proc deleteProc @id int as
begin
declare @childId int;
select @childId=id from tbl where parentId=@id
if(@childId is not null)
begin
exec deleteProc @childId;
end
delete from tbl where id=@id
end