Переименовать ограничение в SQL Server?

83

Можно ли переименовать ограничение в SQL Server? Я не хочу удалять и создавать новый, потому что это ограничение влияет на другие уже существующие ограничения, и мне придется их воссоздавать / изменять.

мезаморфный
источник

Ответы:

77

Вы можете переименовать с помощью sp_rename, используя@objtype = 'OBJECT'

Это работает с объектами, перечисленными в sys.objects, которые включают ограничения

gbn
источник
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
А также: не ставьте квадратные скобки в новом имени. В противном случае вы можете получить имя, содержащее скобки
учета регистра