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

خطاء عند عملية الحذف مع وجود علاقة من نوع "Self-Join"

مغلق
بدأه MAHGOOP في 21 مارس 2007 · 4 رد · 533 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا عندي جدول به ثلاث حقول كما بالصورة

hith5.png

و المشكلة هي عند عملة الحذف حيث يظهر لي هذا الخطاء

DELETE statement conflicted with COLUMN SAME TABLE REFERENCE constraint 'FK_HILEVELS_HILEVELS'. The conflict occurred in database 'Hr', table 'HILEVELS', column 'REPORTSTO'.
The statement has been terminated.

الموضوع هام جدا بالنسبة لي

تم تعديل هذه المشاركة بواسطة MAHGOOP في 21 مارس 2007 في 21:14

------------------------------------------------

لا إله إلا أنت سبحانك أني كنت من الظالمين

-----------------------------------

27e64a660f.gif

#2

تظهر هذه الرسالة عند محاولة حذف من جدول اب و لديه ابناء اي العلاقة بينهما هي One-to-many ولكن بدون On delete cascade

لذلك لحل المشكلة يا تضع On delete cascade في العلاقة و بالتالي عند حذف اي اب يتم حذف جميع ابناءه

او ان تقوم بحذف الابناء و تجرب بعد ذلك تحذف الاب سوف يعمل الحذف بدون مشاكل

يعني اما ان تسمح للمستخدم عند حذف الاب ان يتم حذف ابناءه, او انك تمنعه من حذف الاب اذا كان لديه اولاد

لانه طالما انت واضع علاقة وفارض بها التكاملية المرجعية فلن يسمح لك sql server بوجود ابناء يتامى :)

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

العلاقة من نوع "Self Join " و لذلك لا يوجد "On delete cascade "

و عند الحذف

أنا يوجد لدي بالجدول 10 مستويات ادارية و فقط أستطيع حذف الذي لا يوجد لة أبناء ستقول لي أبداء الحذف من أسفل إلى أعلى

لا يقوم بالحذف

إلا حذف العنصر الذي لم أستخدم المسلسل الخاص بة فقط

------------------------------------------------

لا إله إلا أنت سبحانك أني كنت من الظالمين

-----------------------------------

27e64a660f.gif

#4

أسف جدا

الكود يعمل معي عند عملية الحذف و لكن يجب عدم ترك أبناء أيتام ;)

أي الحذف يتم من المستوى الأدنى للمستوى الأعلى

و شكرا جدا على المساعدة

------------------------------------------------

لا إله إلا أنت سبحانك أني كنت من الظالمين

-----------------------------------

27e64a660f.gif

#5

انا اسف لم انتبه كثيراُ:

في selft join لا يمكن ان يكون هناك On delete cascade او في اي علاقة يكون فيها حلقة

مثلا حتى و لو كان لديك جدول a و جدول اخر b و لكن هناك علاقة بين الجدول a و b, و هناك علاقة اخرى بين b و a فلن تستطيع ايضااستخدام on delete cascade

الحل هو حذف السجلات باستخدام INSTEAD OF triggers

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

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

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