SQL Server数据库中的DF__role_sett__custo__4589517F是什么意思?

4

我刚从另一位开发人员那里接手了一个数据库,并查看了sys.objects表,通过约束进行过滤。

DF__role_sett__custo__4589517F是什么意思-尤其是字符串末尾的ID是什么意思?

我知道DF_role_sett_custo表示role_setting_customer的默认约束,但不确定最后一个ID4589517f的含义。


我一直认为它是用来产生随机性的。我不认为它有意义。 - UnhandledExcepSean
2
顺便提一下,当继承数据库时,我建议首先将整个结构脚本化为每个对象的单个文件,并包括触发器、约束和索引。我们将其保存在版本控制中,但作为额外的好处,这使得搜索和查找变得容易。 - UnhandledExcepSean
1个回答

4

如果在创建约束时没有为其命名,SQL Server 将根据表格和列分配一个随机名称。它附加一个随机数,以避免与现有约束名称冲突。

几乎在所有情况下,最好在创建约束时命名它。这样在其他 T-SQL 语句中更容易按名称引用约束。

例如,在以下创建语句中:

CREATE TABLE dbo.some_table(
   some_field INT NOT NULL DEFAULT(5)
);

默认约束将被分配一个随机名称。在此语句中:

CREATE TABLE dbo.some_table(
   some_field INT NOT NULL CONSTRAINT DF_some_table_some_field DEFAULT(5)
);

默认约束将使用您分配给它的名称(即DF_some_table_some_field)。


1
总是明确命名所创建的所有约束条件是一个好主意 - 否则会变得有点棘手,特别是如果您最终想要禁用或删除其中之一.... - marc_s
@marc_s 我同意,不过我说“几乎所有情况下”是因为对于临时表或表变量,给约束命名并不是非常重要。 - TT.
@TT。所以ID“4589517F”是为特定约束创建的随机名称的一部分?在使用此约束时,这有什么用途(如果有的话)? - Need a bit of help
@Needabitofhelp 1 是的。 2 没有特定的用途。 4589517F 是约束名的一部分。每个约束都有一个名称,无论是您分配的还是由SQL Server分配的。某些T-SQL语句要求您命名约束,例如marc_s指出的:禁用约束或删除约束。 - TT.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接