协慌网

登录 贡献 社区

将具有默认值的列添加到 SQL Server 中的现有表

如何将具有默认值的列添加到SQL Server 2000 / SQL Server 2005 中的现有表中?

答案

句法:

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如: DF__SomeTa__SomeC__4FB7FEF6

可选的 With-Values 声明:
仅当您的 Column 为 Nullable 时才需要WITH VALUES
并且您想要用于现有记录的默认值。
如果 Column 为NOT NULL ,则它将自动使用默认值
对于所有现有记录,无论您是否指定WITH VALUES

插件如何使用默认约束:
如果将 Record 插入SomeTable并且指定SomeCol的值,则默认为0
如果您插入 Record 指定SomeCol的值为NULL (并且您的列允许空值),
然后将使用 Default-Constraint,并且将插入NULL作为 Value。

笔记基于以下每个人的好评。
特别感谢:
@Yatrix,@ WalterStabosz,@ YahooSerious 和 @StackMan 的评论。

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

包含DEFAULT 会使用默认值填充现有行中的列,因此不会违反 NOT NULL 约束。

添加可空列时WITH VALUES将确保将特定的 DEFAULT 值应用于现有行:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES