سؤال

هل هناك طريقة بسيطة لإسقاط مجموعة من الجداول المترابطة في SQL Server؟من الناحية المثالية، أود أن أتجنب القلق بشأن الترتيب الذي سيتم إسقاطهم به لأنني أعلم أن المجموعة بأكملها ستختفي بنهاية العملية.

هل كانت مفيدة؟

المحلول

على الرغم من احتمال أن أبدو غبيًا، لا أعتقد أن SQL Server يدعم بناء جملة الحذف/التتالي.أعتقد أنه يمكنك تكوين قاعدة حذف لإجراء عمليات الحذف المتتالية (http://msdn.microsoft.com/en-us/library/ms152507.aspx)، ولكن بقدر ما أعرف فإن الحيلة في SQL Server هي تشغيل استعلام الإفلات الخاص بك مرة واحدة لكل جدول تقوم بإسقاطه، ثم التحقق من أنه يعمل.

نصائح أخرى

يمكن أن يكون النهج المختلف:تخلص أولاً من القيود، ثم قم بإسقاط الجداول في لقطة واحدة.

بمعنى آخر، DROP CONSTRAINT لكل قيد، ثم DROP TABLE لكل جدول؛في هذه المرحلة، لا ينبغي أن يكون ترتيب التنفيذ مشكلة.

وهذا يتطلب sp____drop____القيود البرنامج النصي يمكنك العثور عليه في مجلة قاعدة البيانات:

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?"
GO
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?"
GO

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

ليس لدي إمكانية الوصول إلى SQL Server لاختبار ذلك، ولكن ماذا عن:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE;

لست متأكدًا إذا كان نهج ديريك ناجحًا.لم تضع علامة عليها كأفضل إجابة حتى الآن.

ان لم:أعتقد أنه مع SQL Server 2005، يجب أن يكون ذلك ممكنًا.
هناك قدموا استثناءات (التي لم أستخدمها بعد).لذا قم بإسقاط الجدول، واكتشف الاستثناء، في حالة حدوثه، ثم جرب الجدول التالي حتى تختفي جميع الاستثناءات.
يمكنك تخزين قائمة الجداول في جدول مؤقت واستخدام المؤشر لاجتيازها، إذا كنت تريد ذلك.

انتهى بي الأمر باستخدام أباتشي com.ddlutils لإجراء عملية الإسقاط بالنسبة لي، الأمر الذي أدى إلى حل المشكلة في حالتي، على الرغم من أن الحل الذي يعمل فقط داخل خادم SQL سيكون أبسط قليلاً.

@ ديريك بارك، لم أكن أعلم أنه يمكنك فصل الجداول بفواصل هناك، لذا فهذا سهل الاستخدام، ولكن يبدو أنه لا يعمل تمامًا كما هو متوقع.لا يتم التعرف على IF EXISTS أو CASCADE بواسطة خادم SQL على ما يبدو، ويعمل drop table X, Y, Z يبدو أنها تعمل فقط إذا كان ينبغي إسقاطها بالترتيب المذكور.

أنظر أيضا http://msdn.microsoft.com/en-us/library/ms173790.aspx, ، الذي يصف بناء جملة الجدول المسقط.

الشيء الذي يمنعك من إسقاط الجداول بأي ترتيب هو تبعيات المفتاح الخارجي بين الجداول.لذا تخلص من FK قبل أن تبدأ.

  1. باستخدام طرق عرض النظام INFORMATION_SCHEMA، يمكنك استرداد قائمة بجميع المفاتيح الخارجية المرتبطة بأي من هذه الجداول
  2. قم بإسقاط كل من هذه المفاتيح الخارجية
  3. الآن يجب أن تكون قادرًا على إسقاط كافة الجداول، باستخدام أي ترتيب تريده.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top