【发布时间】:2008-09-19 08:10:17
【问题描述】:
在 SQL Server 2000/2005 中,
是否可以在向表中添加新列时强制将默认值写入已经存在的行不在新列上使用 NOT NULL?
【问题讨论】:
标签: sql-server database
在 SQL Server 2000/2005 中,
是否可以在向表中添加新列时强制将默认值写入已经存在的行不在新列上使用 NOT NULL?
【问题讨论】:
标签: sql-server database
您需要两个语句。首先创建不为空的列。然后将not null约束改为nullable
alter table mytable add mycolumn varchar(10) not null default ('a value')
alter table mytable alter column mycolumn varchar(10) null
【讨论】:
我理解您的问题,但您是说对于未来的记录,NULL(未知、不确定或任何您的语义)是可以接受的(但如果在插入时将其保留,则会有默认值),但是对于所有现有数据,您将继续为其分配默认值。
我将不得不认真研究这种情况,并询问为什么您甚至要在未来的记录中允许 NULL - 鉴于没有任何历史记录会有它,并且未来的记录存在默认值。
【讨论】:
我怀疑。
http://msdn.microsoft.com/en-us/library/ms190273(SQL.90).aspx
微软推荐的做法如下(取自上面的url)
UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL
【讨论】:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[**WITH VALUES]**
WITH VALUES 可用于将默认值存储在表中每个现有行的新列中。
有关 MSDN 链接的更多详细信息。 https://msdn.microsoft.com/en-in/library/ms190273.aspx
【讨论】: