在SQL Server中是否可以重命名约束?我不想删除并创建一个新的约束,因为这个约束会影响到其他已经存在的约束,我需要重新创建或修改这些约束。
在SQL Server中是否可以重命名约束?我不想删除并创建一个新的约束,因为这个约束会影响到其他已经存在的约束,我需要重新创建或修改这些约束。
经过进一步调查,我发现实际上它必须以这种形式存在:
EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT'
@objtype = 'OBJECT'
。只需指定旧名称和新名称即可。 - pkuderovsp_rename 'CK_Ax', 'CK_Ax1'
INDEX
作为对象类型传递。 - Martin Smithsp_rename
参数时不需要表前缀,如果使用表前缀,则会失败。 - mattmc3回答是正确的:
exec sp_rename
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'
我知道这是一个老问题,但是我刚刚发现以下内容非常有帮助,除了其他很棒的答案:
如果要重命名的约束条件中有句点(dot),那么您需要用方括号括起来,就像这样:
sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'
QUOTENAME()
。例如:sp_rename 'schema.' + QUOTENAME('Name.With.Period.In.It'), 'New.Name.With.Period.In.It'
。当对象的名称存储在变量中而不是手动输入时,这非常有用。 - br3ntALTER TABLE schema.table_name RENAME CONSTRAINT old_fk1 TO new_fk11;
如果你像我一样在运行创建表查询时遇到了“约束已存在”的错误消息,那么可能的原因也与我的情况相同。
当我们的团队将数据库结构更新到生产环境时,我们陷入了困境,因为无法创建一个新表。
我们发现这个表实际上是一个已经被重命名的旧表,因此该表已经以旧名称存在于生产环境中。
所以你的选择是在生产环境中重命名表。或者删除它然后创建新表。