Переименовать ограничение в 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
Абрам Смит

52

Вы можете использовать sp_rename .

sp_rename 'CK_Ax', 'CK_Ax1'

2
+1 Это то, что SSMS использует при переименовании ограничений. Для ограничения PK он передается INDEXкак тип объекта.
Мартин Смит

3
Также важно отметить, что ограничения CHECK, в отличие от PK, не требуют префикса таблицы для первого 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
А также: не ставьте квадратные скобки в новом имени. В противном случае вы можете получить имя, содержащее скобки
учета регистра
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.