Sql server SQL约束不同的名称

Sql server SQL约束不同的名称,sql-server,constraints,Sql Server,Constraints,我有两个完全相同的表的数据库,但它们在约束方面是不同的。请看下面的图片了解详细信息 如您所见,SRO_VT_SHARD_188对\u rebojchar有一个约束,但是SRO_VT_SHARD_D9没有约束 我已删除了SRO_VT_SHARD_D9中的表\u RefObjChar,并使用一个充满约束的查询重新创建了它,但我得到了以下错误: 数据库中已经有一个名为“DF__rebojchar_Resist27”的对象 我知道,如果我将约束的名称更改为DF_uurebojchar\u Resist

我有两个完全相同的表的数据库,但它们在约束方面是不同的。请看下面的图片了解详细信息

如您所见,
SRO_VT_SHARD_188
\u rebojchar
有一个约束,但是
SRO_VT_SHARD_D9
没有约束

我已删除了
SRO_VT_SHARD_D9
中的表
\u RefObjChar
,并使用一个充满约束的查询重新创建了它,但我得到了以下错误:

数据库中已经有一个名为“DF__rebojchar_Resist27”的对象


我知道,如果我将约束的名称更改为
DF_uurebojchar\u Resist27AAA
,我的查询可以运行而不会出错,但我想知道如果我这样做,是否会因为旧约束的名称更改而导致任何查询错误或某些问题无法工作?

如注释中所述,约束是数据库范围的。您甚至不知道所讨论的约束是否定义在这个特定的表上。运行下面的查询(或类似查询),找出约束的使用位置。最好是以声明的方式命名约束(也如注释中所述),而不是让系统或工具命名约束。我倾向于
。所以这就是[dbo_usro_VT_SHARD_DN_udf]。现在,您的约束名称清楚地指示了在何处以及如何使用它。请注意,我使用双下划线分隔模式、对象、列和类型,因为名称中通常使用单下划线。您可以使用不同的表示法。关键是要使命名尽可能明显。对于模式[address\u state]和表[city]列类型,或者对于模式[address],表[state\u city]等,是[address\u state\u type\u df]

select [default_constraints].[name]
       , [objects].[name]
       , [objects].[type_desc]
       , [columns].[name]
from   [sys].[default_constraints] as [default_constraints]
       join [sys].[objects] as [objects]
         on [objects].[object_id] = [default_constraints].[parent_object_id]
       join [sys].[columns] as [columns]
         on [columns].[column_id] = [default_constraints].[parent_column_id]
where  [default_constraints].[name] = N'DF__RefObjChar_Resist27'; 

约束名称是数据库范围的。或架构范围。或者类似的东西;不同的索引名称在任何情况下
DF_TableName\u ColumnName
你会没事的-就像外键一样:
FK_ForeignTable\u PrimaryTable
。但是如果我像
DF_TableName\u ColumnName\u SomeString
那样更改名称,也会没事的?如果更改约束的名称,你的查询应该不会有任何问题(我认为您需要删除并重新创建它)。除非您有某种查询在正常操作中更改了数据模型的结构,这将触及这些约束(可能性很小,我无法解释为什么会有)。