إعادة تسمية الجداول SQL Server و المتتالية هذا التغيير من خلال PK وFK ل

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

  •  08-07-2019
  •  | 
  •  

سؤال

وأريد أن أجد أمر SQL أو شيء يمكن أن تفعل هذا حيث لدي جدول يسمى tblFoo وأريد أن تسميته tblFooBar. ومع ذلك، أريد أن المفتاح الأساسي ليكون أيضا تغيير، على سبيل المثال، حاليا هو:

CONSTRAINT [PK_tblFoo] PRIMARY KEY CLUSTERED 

وأريد تغيير الاسم إلى تغييره إلى:

CONSTRAINT [PK_tblFooBar] PRIMARY KEY CLUSTERED 

وبعد ذلك، انتقل بشكل متكرر من خلال وشلال هذا التغيير على كافة الجداول التي لها علاقة رئيسية سيزور، على سبيل المثال. من هذا:

CHECK ADD  CONSTRAINT [FK_tblContent_tblFoo] FOREIGN KEY([fooID])

لهذا:

 CHECK ADD  CONSTRAINT [FK_tblContent_tblFooBar] FOREIGN KEY([fooID])

وبطبيعة الحال، وأنا أحاول عدم المضي قدما ونفعل كل هذا يدويا لأن أ) وهو عملية عرضة الخطأ، وب) لا نطاق واسع.

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

المحلول

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

DECLARE
    @old_name   VARCHAR(100),
    @new_name   VARCHAR(100)

SET @old_name = 'tblFoo'
SET @new_name = 'tblFooBar'

SELECT
    'EXEC sp_rename ''' + name + ''', ''' + REPLACE(name, @old_name, @new_name) + ''''
FROM dbo.sysobjects
WHERE name LIKE '%' + @old_name + '%'

نصائح أخرى

وإجابة جيدة توم
لقد امتدت مجرد الاستعلام له هنا لتشمل الفهارس

declare
 @old nvarchar(100),
 @new nvarchar(100)

set @old = 'OldName'
set @new = 'NewName'

select 'EXEC sp_rename ''' + name + ''', ''' + 
  REPLACE(name, @old, @new) + ''''
 from sys.objects 
 where name like '%' + @old + '%'
union -- index renames
select 'EXEC sp_rename ''' + (sys.objects.name + '.' + sys.indexes.name)  +  ''', ''' +
  REPLACE(sys.indexes.name, @old, @new) + ''', ''INDEX'''
  from sys.objects 
   left join sys.indexes on sys.objects.object_id = sys.indexes.object_id
  where sys.indexes.name like '%' + @old + '%'

وأداة عظيمة أن يأخذ الألم من إعادة تسمية الجداول هي بوابة الأحمر SQL ريفاكتور وسوف تجد تلقائيا الاعتماد الخاص بك وعمل كل ما الاشياء بالنسبة لك أيضا.

ومروحة كبيرة: -)

وسوف SQL Server لا تفعل ذلك مباشرة بقدر ما أنا على علم. سيكون لديك لبناء النصي للقيام التغيير يدويا. ويمكن تحقيق ذلك عن طريق توليد SQL لتعريف الجدول (SSMS سوف نفعل ذلك) والقيام بعملية بحث واستبدال في الأسماء.

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