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

时间:2020-03-06 14:21:04  来源:igfitidea点击:

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

解决方案

ALTER TABLE ADD ColumnName {Column_Type} Constraint

MSDN文章ALTER TABLE(Transact-SQL)具有所有alter table语法。

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

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

句法:

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",那么它将自动使用默认值
对于所有现有记录,无论是否指定"有值"。

插入如何与默认约束一起工作:
如果我们在" SomeTable"中插入记录,但未指定" SomeCol"的值,则它将默认为" 0"。
如果我们插入一条记录并将" SomeCol"的值指定为" NULL"(并且列允许为空),
则将不使用Default-Constraint并将" NULL"作为值插入。

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

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

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

使用:

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

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