SQL خادم 2005 - بيان SQL لإزالة مفاتيح مجمع من جداول يستند إلى استعلام على tablenames؟

StackOverflow https://stackoverflow.com/questions/1222432

سؤال

واني اسعى الى استعادة نسخة احتياطية من قاعدة بيانات Microsoft Dynamics NAV، الذي فشل للأسف في الوقت الذي تحاول لتحديد KEY متفاوت للجداول التي سبق أن تتجمع مفاتيح.

في NAV، كل شركة في قاعدة البيانات يحصل نسخة خاصة بها من الجداول، مسبوقة ب اسم الشركة، على سبيل المثال COMPANY$User_Setup. لذا أود أن إزالة أي مفتاح عنقودية على شركة معينة، وهو ما يعني على أي جدول أي اسم يبدأ مع "الشركة $ '.

حصل

لقد أي شخص عبارة SQL التي يمكن أن تؤدي هذا؟

ويرجع الفضل في ذلك مسبقا!

مع أطيب التحيات، مارتن

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

المحلول

وستحتاج إلى القيام بذلك باعتباره المؤشر. على افتراض يدعى كل القيود PK اتساقا ويقوم على اسم الجدول، وكنت قادرا على فعل شيء مثل (غير مجربة، لذلك قد تحتوي على الأخطاء المطبعية أو أخطاء في بناء الجملة vauge):

DECLARE mycursor CURSOR FOR SELECT name FROM sysobjects WHERE name LIKE 'Company$%'

OPEN CURSOR
FETCH NEXT FROM mycursor INTO @tablename
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = N'ALTER TABLE QUOTENAME(' + @tablename + ') DROP CONSTRAINT PK_' + @tablename 
    EXEC sp_ExecuteSQL @sql
    FETCH NEXT FROM mycursor INTO @tablename
END

CLOSE CURSOR
DEALLOCATE CURSOR

إذا لم تكن اسمه مقرها في PK الخاص بك على TABLENAME، ثم سيكون لديك لتعديل هذا الاستعلام أيضا على أساس sysconstraints أو sysindexes للحصول على اسم PK الفعلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top