ALTER TABLE 只允许添加满足下述条件的列: 列可以包含 Null 值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允

来源:互联网 发布:js判断符号不等于 编辑:程序博客网 时间:2024/05/21 05:43

执行SQL语句:ALTER TABLE T ADD E NVARCHAR(20) NOT NULL;

报错:

消息 4901,级别 16,状态 1,第 1 行
ALTER TABLE 只允许添加满足下述条件的列: 列可以包含 Null 值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列。不能将列“E”添加到非空表“T”中,因为它不满足上述条件。


出错原因:该表里已经有数据了,所以再添加字段时,已经有的数据该字段应该是空,但是我们添加字段时设定的是非空,所以就矛盾了,报错了。

如:查看该表T,已经有数据了

USE TEST;

SELECT *

FROM T;


ID EEE NAME
1 NULL NULL
2 NULL NULL
3 NULL NULL
4 NULL NULL
7 NULL NULL

解决办法:先将该列设为允许为空,进行添加,然后将已经有的该数据更新成具体的非空值,然后再修改该列的属性为非空,这样,再插入非空的值就行了。

如:

ALTER TABLE T ADD E NVARCHAR(20) NULL;--先将该列设为允许为空,进行添加

UPDATE T SET E='DAN'--将已经有的该数据更新成具体的非空值

ALTER TABLE T ALTER COLUMN E NVARCHAR(20) NOT NULL;--修改该列的属性为非空

INSERT INTO E(ID,E) VALUES(8,'DAN')--成功插入

原创粉丝点击