【发布时间】:2016-05-07 07:49:39
【问题描述】:
在 SQL Server 中,我有一个现有的表。现在我想为其中一列添加一个 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]
【问题讨论】:
-
当您像在第一个示例中所做的那样添加约束时,sql server 将自行为该约束生成一个名称。它生成的名称对人类不友好。关键是每个约束都必须有一个名称。您可以更改该列以避免命名您的约束。但是,我建议您应该命名您的约束。明确地使用你的 sql 对象从来都不是一件坏事。
-
这听起来是一种很好的方式,可以在未来为自己添加更多工作。当您知道它的名称时删除约束?琐碎的。当您让系统生成名称时删除它 - 嗯,首先您必须找到它(并确保您找到了正确的名称),然后您必须生成动态 SQL 以实际执行删除操作。可爱的。
-
"明确地使用你的 sql 对象从来都不是一件坏事。"不对!在 ETL 环境中,您可能希望保留表的 _prev 版本。如果你的表有约束并且你命名它们,那么你必须重命名 _prev 表上的约束,然后才能在新表上再次创建它们。这很麻烦,但在我们的系统上,它已成为一个关键问题,因为其他重要进程会由于旧表上需要排他锁来重命名约束而定期失败。解决方案?不要显式命名约束,那么你根本不需要接触活动表。
标签: sql-server tsql constraints default-value