添加默认约束的命令

86

看起来至少有两种使用纯T-SQL添加默认约束的方法。我是否正确地认为下面这两种方法之间唯一的区别在于第二种方法明确创建了约束名称,而第一种方法由SQL Server生成一个名称?

ALTER TABLE [Common].[PropertySetting] ADD DEFAULT ((1)) FOR [Active];
ALTER TABLE [Common].[PropertySetting] ADD CONSTRAINT [DF_PropertySetting_Active) DEFAULT ((1)) FOR [Active];
1个回答

112

基本上,对于ALTER TABLE,是的。

您也可以在一个步骤中使用默认值添加列到CREATEALTER

ALTER TABLE dbo.TableName
    ADD bar varchar(100) CONSTRAINT DF_Foo_Bar DEFAULT ('bicycle');

ALTER TABLE dbo.TableName
    ADD bar varchar(100) DEFAULT ('bicycle');
正如您所提到的,如果没有提供名称,系统会生成一个名称。 MSDN说,CONSTRAINT constraint_name是可选的。对于任何约束也适用相同规则。
如果该列已经创建,并且您只想添加(命名)DEFAULT约束,则使用:
ALTER TABLE dbo.TableName
    ADD CONSTRAINT DF_Foo_Bar DEFAULT 'bicycle' FOR FieldName;

如果要让系统生成默认约束名(如DF_TableName_FieldName_12345678),则可以省略CONSTRAINT <name>部分,写成:

DEFAULT约束名将会采用这个形式:DF_{TableName}_{Column}_{8RandomChars}
ALTER TABLE dbo.TableName
    ADD DEFAULT 'bicycle' FOR FieldName;

3
即使这一列已经存在,我可以使用自动生成的名称替代 DF_Foo_Bar 吗? - slartidan
@slartidan 是的,使用语法 ALTER TABLE dbo.TableName ADD DEFAULT(SYSUTCDATETIME()) FOR Created; 来创建一个系统命名的约束对象。请注意,必须省略 "CONSTRAINT" 关键字(这很令人困惑)。 - Dai

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