Перейменувати обмеження в SQL Server?


83

Чи можна перейменувати обмеження в SQL Server? Я не хочу видаляти та створювати нове, оскільки це обмеження впливає на інші вже існуючі обмеження, і мені доведеться їх відтворити / змінити.

Відповіді:


77

Ви можете перейменувати за допомогою sp_rename за допомогою@objtype = 'OBJECT'

Це працює з об'єктами, переліченими в sys.objects, що включає обмеження


14
Про всяк випадок, коли ви не можете змусити це працювати, у MSDN сказано: "При перейменуванні обмеження повинна бути вказана схема, до якої належить обмеження."
Black Light

1
Для обмежень PK немає необхідності @objtype = 'OBJECT'вказувати. Просто вкажіть старе ім’я та нове ім’я.
pkuderov

77

Після ще кількох копань я виявив, що насправді це має бути у такій формі:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT'

Джерело


7
Це більш точна відповідь. Інші форми працюють лише тому, що більшість людей скидають всі свої таблиці у схему за замовчуванням (зазвичай "dbo :), і схему за замовчуванням ви можете опустити. Але якщо ви використовуєте кілька схем, це правильно (і ви завжди можете вказати" dbo " )
Годеке

З джерела, схоже, вам не потрібна довідка N'OBJECT '
Abrham Smith

52

Ви можете використовувати sp_rename .

sp_rename 'CK_Ax', 'CK_Ax1'

2
+1 Це те, що SSMS використовує при перейменуванні обмежень. Для обмеження PK воно передається INDEXяк тип об'єкта.
Martin Smith

3
Важливо також зазначити, що обмеження CHECK, на відміну від ПК, не вимагають префікса таблиці для першого sp_renameпараметра, і не зможуть його використовувати.
mattmc3

8

відповідь вірна:

exec sp_rename 
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'

4

Я знаю, що це давнє запитання, але я просто виявив, що на додаток до інших чудових відповідей дуже корисним є:

Якщо обмеження, яке потрібно перейменовувати, має в ньому крапку (крапка), то вам потрібно укласти його у квадратні дужки приблизно так:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'

1
А також: не ставте квадратні дужки в новій назві. Інакше у вас може з’явитися ім’я, що містить дужки
casenonsensitive
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.