是否可以添加我指定为NOT NULL的列,我不想指定DEFAULT值,但是MS-SQL 2005说:
ALTER TABLE仅允许添加可以包含空值或指定DEFAULT定义的列,或者要添加的列是Identity或timestamp列,或者如果不满足任何先前条件,则该表必须为空才能允许添加本专栏的内容。无法将列“ test”添加到非空表“ shiplist”中,因为它不满足这些条件。
如果是,请让我知道语法,如果否,请说明原因。
是否可以添加我指定为NOT NULL的列,我不想指定DEFAULT值,但是MS-SQL 2005说:
ALTER TABLE仅允许添加可以包含空值或指定DEFAULT定义的列,或者要添加的列是Identity或timestamp列,或者如果不满足任何先前条件,则该表必须为空才能允许添加本专栏的内容。无法将列“ test”添加到非空表“ shiplist”中,因为它不满足这些条件。
如果是,请让我知道语法,如果否,请说明原因。
Answers:
将列添加到表中,更新现有行以使它们都不为空,然后添加“非空”约束。
否-SQL Server相当合理地拒绝了此操作,因为 它不知道现有行应具有的值
同时创建默认值,然后立即将其删除很容易。
@ Damien_The_Unbeliever的评论,是否添加了计算列?问题和答案都没有暗示这样的意思。如果是计算列,则错误状态为:
“只能在计算列上创建UNIQUE或PRIMARY KEY约束,而CHECK,FOREIGN KEY和NOT NULL约束要求保留计算列”
好吧,如果要继续这个猜谜游戏,这是我的脚本,说明在一个“ ALTER TABLE”步骤中添加“ NOT NULL”列:
CREATE TABLE TestInsertComputedColumn
(
FirstName VARCHAR(100),
LastName CHAR(50)
);
insert into TestInsertComputedColumn(FirstName,LastName)
select 'v', 'gv8';
select * from TestInsertComputedColumn;
ALTER TABLE TestInsertComputedColumn
ADD FullName As FirstName + LastName PERSISTED NOT NULL;
select * from TestInsertComputedColumn;
--drop TABLE TestInsertComputedColumn;