使用生成的名称添加 DEFAULT 约束

Add DEFAULT constraint with a generated name

在 SQL 服务器中,我有一个现有的 table。现在我想向其中一列添加一个 DEFAULT 约束 - 而不必为其定义名称

-- generated name works fine when creating new column
ALTER TABLE [xyz]
ADD [newColumn] int NOT NULL DEFAULT 0

-- when adding a default value afterwards I seem to have to provide a name
ALTER TABLE [xyz]
ADD CONSTRAINT [iDontWantToPutANameHere] DEFAULT 0 FOR [existingColumn]

可以肯定的是,您可以将默认约束添加到现有列的唯一方法是命名它。

如果获得系统生成的名称对您来说很重要,您可以这样做:

  1. 更改 Table 添加具有未命名默认值的新列。
  2. 更新 Table,将新列的值设置为旧列的值。
  3. 删除旧列。
  4. 将新列重命名为旧列的名称。

我个人希望 SQL 服务器没有提供任何不命名约束的选项。我讨厌处理一些懒惰的开发人员留下的系统生成的名称。

您可以为现有列创建默认约束,而无需指定其名称,例如:

create table test
(
    existing_column int
)

alter table test
    add default 0 for existing_column

但是,有很多文章建议最好明确命名约束。因为很难删除或以其他方式更改系统命名的约束。此外,如果您有同一数据库的多个实例,则它们之间的默认名称将不相同。