将具有默认值的列添加到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