SQL CONSTRAINT 不同名称

问题描述 投票:0回答:1

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

enter image description here

如您所见,

SRO_VT_SHARD_188
_RefObjChar
有约束,但
SRO_VT_SHARD_D9
没有。

我已删除

_RefObjChar
中的表
SRO_VT_SHARD_D9
并使用充满约束的查询重新创建它,但我收到此错误:

数据库中已有一个名为“DF__RefObjChar_Resist27”的对象。

我知道如果我将 CONSTRAINT 的名称更改为

DF__RefObjChar_Resist27AAA
,我的查询可以运行而不会出现错误,但我想知道如果我这样做,是否会导致任何查询错误或由于旧 CONSTRAINT 的名称已更改而无法正常工作?

sql-server constraints
1个回答
0
投票

正如评论中所指出的,约束是数据库范围内的。您甚至不知道所讨论的约束是否在此特定表上定义。运行下面的查询(或类似的查询)以找出使用约束的位置。最好以声明方式命名约束(也如注释中所述),而不是让它们由系统或工具命名。我倾向于

<schema>__<object>__<column>__<type>
。所以这将是 [dbo__SRO_VT_SHARD_DN__df]。现在,您的约束名称清楚地表明了它的使用位置和方式。请注意,我使用双下划线来分隔架构、对象、列、类型,因为名称中经常使用单下划线。您可以使用不同的符号。重点是使命名尽可能明显。是 [address_state_city_type_df] 用于架构 [address_state] 和表 [city] 列类型,还是用于架构 [address]、表 [state_city] 等

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'; 
© www.soinside.com 2019 - 2024. All rights reserved.