السلام عليكم و رحمة الله و بركاته،
قد تحتاج إلى حذف جميع البيانات في الجداول ثم إعادة تصفير الحقول الأساسي فماذا نفعل؟
طبعاً سننفذ جملة truncate لحذف الجداول، و لكن ماذا تفعل إذاكانت هذه الجداول كثيرة جداً؟ سيكون أمراً سخيفاً أن تكتب جملة truncate ثلاثين أو أربعين مرة .. أليس كذلك؟
يمكن عمل ذلك في ثلاث خطوات فقط بإستخدام system stored procedure يدعى sp_msforeachtable.
الخطوة الأولى هي تعطيل العلاقات بين الجداول مؤقتاً:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
حيث ? تعني جميع الجداول في قاعدة البيانات.
الخطوة الثانية هي حذف البيانات من الجداول:
EXEC sp_MSForEachTable "DELETE FROM ?"
لحذف البيانات من جدول معين و ليس كل الجداول نستبدل المجهول ? بإسم الجدول، مثلاً:
EXEC sp_MSForEachTable "DELETE FROM Students"
الخطوة الثالثة هي تفعيل العلاقات بين الجداول مرة أخرى:
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
إذا أضفت صفوفاً جديدة في هذه الجداول ستلاحظ أن قيمة حقل ID لم تعد بعد إلى الصفر، لذا لإعادة تصفير الحقول الأساسية في الجداول ننفذ هذا الإجراء:
EXEC sp_MSforeachtable "DBCC CHECKIDENT ( '?', RESEED, 0)"
إذا كنت تريد تصفير الحقل الأساسي في جدول معين إستبدل ? بإسم الجدول.