-
في الواقع، طريقة حذف البيانات في قاعدة البيانات ليست معقدة، لماذا يجب أن أهتم بها؟ أولاً، ما أقدمه هنا هو حذف جميع البيانات الموجودة في قاعدة البيانات، لأن البيانات قد تشكل قيودًا متبادلة الوقوع في حلقة لا نهاية لها. في الواقع، طريقة حذف البيانات في قاعدة البيانات ليست معقدة، لماذا يجب أن أهتم بها؟ أولاً، ما أقدمه هنا هو حذف جميع البيانات الموجودة في قاعدة البيانات، لأن البيانات قد تشكل قيودًا متبادلة قد يقع في حلقة لا نهائية ثانيًا، يتم استخدام الإجراء المخزن غير الرسمي الخاص بـ Microsoft هنا.
ربما واجه العديد من القراء والأصدقاء هذا النوع من الأشياء: إنهم يريدون تنظيف قاعدة بيانات فارغة بناءً على قاعدة بيانات التطوير، ولكن بسبب الافتقار إلى الفهم الشامل لبنية قاعدة البيانات، عند حذف السجلات في الجدول، لا يمكنهم حذفها لأنه قد تكون هناك قيود على المفاتيح الخارجية، فإن بنية قاعدة البيانات المشتركة هي جدول رئيسي وجدول فرعي، وفي هذه الحالة، يتعين عليك عمومًا حذف سجلات الجدول الفرعي أولاً، ثم حذف سجلات الجدول الرئيسي.
عندما يتعلق الأمر بحذف سجلات البيانات، غالبًا ما تتبادر إلى الذهن عبارات الحذف والاقتطاع، ومع ذلك، إذا كانت هناك قيود بين جدولين أو أكثر، فقد تفشل هاتان العبارتان، والأمر الأكثر فظاعة هو أن هذين الأمرين لا يمكن تشغيلهما إلا طاولة واحدة في كل مرة. فماذا يجب عليك فعله عندما تريد حقًا حذف كافة السجلات الموجودة في قاعدة بيانات SQL Server؟ هناك خياران:
1. احذف واحدًا تلو الآخر بالترتيب، هذه الطريقة غير واقعية للغاية عندما يكون هناك الكثير من الجداول، حتى لو لم يكن هناك العديد من الجداول ولكن هناك العديد من القيود، فلا يزال يتعين عليك قضاء الكثير من الوقت والطاقة لدراسة القيد. العلاقات، ثم اكتشف الجدول الذي تريد حذفه أولاً، والجدول الذي تريد حذفه بعد ذلك، والجدول الذي تريد حذفه أخيرًا.
2. قم بتعطيل جميع القيود، وحذف جميع البيانات، وأخيرًا قم بتمكين القيود. وبهذه الطريقة لن تضطر إلى قضاء الوقت والطاقة في دراسة القيود، ما عليك سوى كتابة إجراء مخزن بسيط لإكمال هذه المهمة تلقائيًا.
ومن بين هذين الخيارين، ليس من الصعب أن نرى أن الخيار الثاني هو الأبسط والأكثر فعالية، لذا عند استخدام الخيار الثاني، كيفية تنفيذه؟
أولاً، عليك كتابة تعليمات برمجية للتكرار عبر جميع الجداول. هنا أوصي بإجراء مخزن sp_MSForEachTable، لأنه لا يوجد وصف لهذا الإجراء المخزن في وثائق Microsoft الرسمية، وربما لم يسمع به العديد من المطورين، لذا يمكنك البحث عنه. على الإنترنت، معظم الحلول معقدة للغاية. قد يظن البعض أنه نظرًا لعدم وجود مستند رسمي، قد تكون عملية التخزين هذه غير مستقرة، وسيرفضونها نفسيًا، لكن هذا ليس هو الحال. دعونا نلقي نظرة على البرنامج النصي الكامل:
إنشاء إجراء sp_DeleteAllData
مثل
EXEC sp_MSForEachTable "تغيير الجدول؟ NOCHECK CONSTRAINT ALL"
EXEC sp_MSForEachTable "تغيير الجدول؟ تعطيل تشغيل الكل"
EXEC sp_MSForEachTable 'هل تريد الحذف من؟'
EXEC sp_MSForEachTable "تغيير الجدول؟ التحقق من الكل"
EXEC sp_MSForEachTable "تغيير الجدول؟ تمكين تشغيل الكل"
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
يذهب
يقوم هذا البرنامج النصي بإنشاء إجراء مخزن يسمى sp_DeleteAllData. تقوم العبارة الأولى بتعطيل القيود والمشغلات على التوالي. وتقوم العبارة الثالثة بحذف كافة البيانات بالفعل. والعبارة الأخيرة تعرض السجلات في كل جدول. يمكن حذف هذا البيان أريد فقط التأكد من مسح كافة الجداول.
يمكنك تشغيل هذا الإجراء المخزن على أي قاعدة بيانات، بالطبع ليس على قاعدة البيانات التي تم إنشاؤها، ولكن لا تلومني لأنني لم أخبرك على أي حال، قم بعمل نسخة احتياطية من قاعدة البيانات أولاً، واستخدم قاعدة البيانات الاحتياطية لاستعادتها، ثم قم بتشغيل الإجراء المخزن ، هاها، حتى لو كانت قاعدة بيانات كبيرة، فلن يستغرق الأمر وقتًا طويلاً حتى تصبح قاعدة البيانات الخاصة بك قاعدة بيانات فارغة، وهو أمر مخيف بعض الشيء!