关闭

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

3989人阅读 评论(0) 收藏 举报
分类:

执行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')--成功插入

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1032683次
    • 积分:14209
    • 等级:
    • 排名:第848名
    • 原创:317篇
    • 转载:626篇
    • 译文:3篇
    • 评论:92条