在SQL Server中重命名约束?

mez*_*hic 73 sql sql-server constraints

是否可以在SQL Server中重命名约束?我不想删除并创建一个新约束,因为这个约束会影响其他已存在的约束,我将不得不重新创建/更改它们.

gbn*_*gbn 69

您可以重命名使用sp_rename使用@objtype = 'OBJECT'

这适用于sys.objects中列出的包含约束的对象

  • 为了防止这种情况发生,它在MSDN中说 - *"当重命名约束时,必须指定约束所属的模式."* (13认同)

ozz*_*ozz 55

经过一番挖掘,我发现它实际上必须采用这种形式:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT'
Run Code Online (Sandbox Code Playgroud)

资源

  • 这是更精确的答案.其他形式只能工作,因为大多数人将所有表转储到默认模式(通常是"dbo :),你可以省略默认模式.但是如果你使用多个模式,这是正确的(你可以随时声明"dbo" ). (6认同)

Mik*_*son 47

您可以使用sp_rename.

sp_rename 'CK_Ax', 'CK_Ax1'
Run Code Online (Sandbox Code Playgroud)

  • 同样重要的是要注意,与PK不同,CHECK约束在第一个`sp_rename`参数上不需要表前缀,如果使用的话,它将失败. (3认同)
  • +1这是SSMS在重命名约束时使用的.对于PK约束,它将`INDEX`作为对象类型传递. (2认同)

小智 8

答案是真的:

exec sp_rename 
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'
Run Code Online (Sandbox Code Playgroud)


Win*_*nks 5

我知道这是一个老问题,但我发现除了其他很棒的答案之外,以下内容非常有帮助:

如果要重命名的约束中有句点(点),则需要将其括在方括号中,如下所示:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'
Run Code Online (Sandbox Code Playgroud)

  • 另外:不要将方括号放在新名称中。否则,您可能会得到包含括号的名称 (2认同)