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

原创 2013年12月06日 11:07:34

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

相关文章推荐

【技巧】SQL中如何修改表格(table)中列(column)的默认值(default);

如何修改Mysql中一个表格中某列的默认值。——陶洲川

MySQL已有column值为NULL,修改列属性为NOT NULL报1138错误

这是我的数据库,在建表的时候没有设置email、comment列为非空,其默认值便为NULL,现在我想把列属性改为NOT NULL DEFAULT ''。你可以看到我的email字段成功了,但并没有设...

MVC初学笔记

初学MVC4,在网上看到的这个教程很好:http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html,一直在一步步的跟着做...

电商订单提交

在订单提交后需要保存订单和订单详情的两个对象,提交订单后消除购物车的相应内容 1.动作类,保存订单 public String saveOrder() throws Exception{ /...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ALTER TABLE 只允许添加满足下述条件的列: 列可以包含 Null 值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允
举报原因:
原因补充:

(最多只允许输入30个字)