【问题标题】:Rename a constraint in SQL Server?重命名 SQL Server 中的约束?
【发布时间】:2017-12-25 22:02:53
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server constraints


    【解决方案1】:

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

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

    Source

    【讨论】:

    • 这是更准确的答案。其他形式之所以有效,是因为大多数人将所有表转储到默认架构(通常是“dbo:”)中,您可以省略默认架构。但如果您使用多个架构,这是正确的(并且您始终可以声明“dbo” )。
    • 从源头看,您似乎不需要 N'OBJECT' 参考
    【解决方案2】:

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

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

    【讨论】:

    • 万一你不能让它工作,它在 MSDN 中说 - “重命名约束时,必须指定约束所属的架构。”
    • 对于 PK 约束,不需要指定 @objtype = 'OBJECT'。只需指定旧名称和新名称。
    【解决方案3】:

    您可以使用sp_rename

    sp_rename 'CK_Ax', 'CK_Ax1'
    

    【讨论】:

    • +1 这是 SSMS 在重命名约束时使用的。对于 PK 约束,它将 INDEX 作为对象类型传递。
    • 同样重要的是要注意,CHECK 约束与 PK 不同,不需要在第一个 sp_rename 参数上使用表前缀,如果使用它就会失败。
    【解决方案4】:

    答案是真的:

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

      • 另外:不要将方括号放在新名称中。否则你可能会得到一个包含括号的名称
      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 2010-12-29
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多