الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

How To make Auto Delete in Recursice Table

مغلق
بدأه ya3mro في 7 نوفمبر 2005 · 8 رد · 748 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

شباب مثلا لو بنعمل برنامج يخزن شجرة العائلة فان افضل طريقة لتحزينها في ال DB ك Table هو جدول واخد فقط وليكن شكله المبسط هكذا

Id, Name , ParentID

فمثلا

** أحمد (1)

*** محمد (2)

*** علي (3)

*** اسماعيل (4)

** عمرو(5)

*** محمد (6)

سيخزنز في الداتا بيز بهذه الطريقة

id name ParentId

1 أحمد 0

2 محمد 1

3 علي 1

4 اسماعيل 3

5 عمرو 0

6 محمد 5

وهكذا فالمشكلة الرئيسية التي تقابلني انه عندما الغاء مثلا ( أحمد ) لا بد الغاء محمد اولا ثم اسماعيل ثم علي ثم بعد الغاء كل الفرعي منه يتم الغاء ( احمد ) الرئيسي وهه عملية تحتاج لجهد كبير

فهل هناك حل لهذه المشكلة بحيث يتم الغاء الكل في Transact واحد

#2

و عليكم السلام و رحمة الله و بركاته

كمحاولة بسيطة للمساعدة صممت هذا التريجر ، مشكلته انه يحذف الأبناء كلهم ولكن في مستوى فرعي واحد فقط ، فمثلاً لو كان الابن المفترض حذفه بحذف الأب هو أيضاً مندرج تحته أبناء فإن التريجر لا يقوم بتنفيذ مهمة حذف ابن الابن بل يحذف الابن فقط

عموما هي بداية بسيطة وربما أمكنك تطويرها

CREATE TRIGGER DELTREE ON [dbo].[TREE] 
FOR  DELETE 

AS /**/

 BEGIN DECLARE @Id Int

SELECT @Id= [Id] FROM deleted /**/

DELETE
	FROM [TREE] WHERE [parentId] =@Id

end
#3

السلام عليكم

اخى محمد مش الافضل انك فى Diagram تحدد خاصية cascade delete related records ؟

بدل من كتابة TRIGGER

{وَاتَّقُواْ يَوْمًا تُرْجَعُونَ فِيهِ إِلَى اللّهِ ثُمَّ تُوَفَّى كُلُّ نَفْسٍ مَّا كَسَبَتْ وَهُمْ لاَ يُظْلَمُونَ} (281) سورة البقرة

br17.gif

برنامج الإتصلات الإدارية والارشيف الالكتروني

برنامج الخبير لنقاط البيع المباشرة

#4

و عليكم السلام و رحمة الله و بركاته

طبعاً هذا أسهل ولكن هذا في حالة كنا نستخدم أكثر من جدول ، أما في حالة كانت العلاقة بين حقلين في نفس الجدول فهذا غير ممكن

تم تعديل هذه المشاركة بواسطة محمد النحراوي في 9 نوفمبر 2005 في 16:17

#5

شباب جزاكم الله كل خير ولكن انا عاوز Recursive لل ترجي اده اعمل ايه بحيث يعمل كل حاجه ؟؟

حد عنده حل لاني محتاجها ضروري جدا

#7

:)

الصورة واضحة بدون صورة

هل جربت التريجر ؟ وهل حاولت الإضافة عليه مثلاً ؟

#9

:blink: كود متعب و الفكرة جديدة عليه و لكن حلها من ملف وضعه الاستاذ حميد فى موضوعه حول بناء الحلول المالية و هو

Create PROCEDURE RemoveMe @Id int
AS --
SET NOCOUNT ON DECLARE @LocalID Int
SELECT @LocalID=@ID

/* Cursor Begin */
DECLARE NextLevel CURSOR LOCAL FOR
SELECT Id FROM Tbl_RecursiveDelete WHERE ParentID=@ID
/* Open Cursor */
OPEN NextLevel
FETCH NEXT FROM NextLevel INTO @LocalID --
/* Loop */
WHILE @@FETCH_STATUS=0 --
BEGIN --
/* Nested Stored Procedure */
EXEC RemoveRecursive @LocalID
FETCH NEXT FROM NextLevel INTO @LocalID --
END

/* Close And Deallocate Cursor */
CLOSE NextLevel
DEALLOCATE NextLevel

DELETE FROM Tbl_RecursiveDelete WHERE Id=@Id
Go

و لتنفيذ الكود

Exec RemoveRecursive 1

الكود قد يوجد به اخطاء و جارى العمل عليه

RecursiveDelete.rar

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

هذا الموضوع مغلق.

مواضيع مشابهة