SQL خادم 2005 - بيان SQL لإزالة مفاتيح مجمع من جداول يستند إلى استعلام على tablenames؟
-
10-07-2019 - |
سؤال
واني اسعى الى استعادة نسخة احتياطية من قاعدة بيانات 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 الفعلي.