将具有默认值的列添加到 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
并且您想要用于现有记录的默认值。
如果您的栏NOT NULL ,那么它将自动使用默认值
对于所有现有记录,无论是否指定WITH VALUES

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

注释基于以下每个人的好评。
特别感谢:
@ 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
ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

当您要添加的列具有NOT NULL约束但没有DEFAULT约束(值)时要当心。如果表中有任何行,则ALTER TABLE语句在这种情况下将失败。解决方案是从新列中删除NOT NULL约束,或者为其提供DEFAULT约束。

最基本的版本只有两行

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

采用:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO

如果要添加多个列,可以使用这种方式,例如:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

采用:

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

参考: ALTER TABLE(Transact-SQL) (MSDN)