在SQL Server中向现有表添加一个带有默认值的列。

42 浏览
0 Comments

在SQL Server中向现有表添加一个带有默认值的列。

如何在现有的SQL Server 2000 / SQL Server 2005表中添加一个带有默认值的列?

admin 更改状态以发布 2023年5月23日
0
0 Comments

ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

包括DEFAULT 会在现有行中为列填充默认值,因此不会违反NOT NULL约束。

0
0 Comments

语法:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

示例:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

备注:

可选约束名称:
如果忽略 CONSTRAINT D_SomeTable_SomeCol,则SQL Server将自动生成一些有趣的默认约束名称,如:DF__SomeTa__SomeC__4FB7FEF6

可选带值语句:
只有当列可空并且您需要为现有记录使用默认值时,才需要使用 WITH VALUES
如果列是 NOT NULL,则它将自动使用默认值为所有现有记录,无论是否指定 WITH VALUES

默认约束的插入工作原理:
如果在向 SomeTable 中插入记录时未指定 SomeCol 的值,则其默认为 0
如果在插入记录时,指定了 SomeCol 的值为 NULL(并且您的列允许为 null),
则默认约束将 不会 使用,而是将 NULL 插入为值。

备注基于下面所有人的反馈。
特别感谢:
    @Yatrix、@WalterStabosz、@YahooSerious 和 @StackMan 的评论。

0