可不可以给一个表加一列NOTNULL而且没有默认值

时间:2022-12-26 09:52:46
可不可以给一个表加一列NOTNULL而且没有默认值
这样写出错
ALTER TABLE [dbo].[aaa] ADD bbb SMALLINT NOT NULL

谢谢了

8 个解决方案

#1


可不可以给一个表加一列NOTNULL而且没有默认值没问题啊,报什么错?

#2


下面的代码没有报错:

if OBJECT_ID('aaa') is not null
   drop table aaa
go

create table aaa(v1 int,v2 int)

--没有报错
ALTER TABLE [dbo].[aaa] ADD bbb SMALLINT NOT NULL

#3


我这边提示,只能加允许NULL或者有默认值的列,
是不是我这个表里已经有数据了呀,

如果没有数据也许可以改

#4


具体是报什么错误呢。

如果这一列已经存在,可以用这个代码:
ALTER TABLE [dbo].[aaa] 
alter column  bbb SMALLINT NOT NULL

#5


有数据是不行的,要么你新建个表,把那个null的列也写上,然后把数据导过去,删除源表再重命名新表

#6


表里有数据的情况下
bbb是新加的,肯定没有值,然后没有默认值,所以只能为null了,但是你有不允许为null。这个让数据库情何以堪呢?

建议先添加列,允许null。然后update把对应列值填上后,再修改为不允许为null。
或者按楼上的方法,弄到一张新表里,然后把表名改回来。

#7


引用 3 楼 tanshihou 的回复:
我这边提示,只能加允许NULL或者有默认值的列,
是不是我这个表里已经有数据了呀,

如果没有数据也许可以改


哦,那你的问题就是,你的bbb列已经存在了,这样确实没办法修改为not null,因为这个列中存在null值。

这个也简单,关键是你如何处理这种NULL值,我觉得可以先把这些null 替换为空串,也就是''

然后再用这个语句,设置为not null:

ALTER TABLE [dbo].[aaa] 
alter column  bbb SMALLINT NOT NULL

#8


你要分步加
第一步加一列没有任何约束的列
第二步给这列赋值
第三步给这列加非空约束

#1


可不可以给一个表加一列NOTNULL而且没有默认值没问题啊,报什么错?

#2


下面的代码没有报错:

if OBJECT_ID('aaa') is not null
   drop table aaa
go

create table aaa(v1 int,v2 int)

--没有报错
ALTER TABLE [dbo].[aaa] ADD bbb SMALLINT NOT NULL

#3


我这边提示,只能加允许NULL或者有默认值的列,
是不是我这个表里已经有数据了呀,

如果没有数据也许可以改

#4


具体是报什么错误呢。

如果这一列已经存在,可以用这个代码:
ALTER TABLE [dbo].[aaa] 
alter column  bbb SMALLINT NOT NULL

#5


有数据是不行的,要么你新建个表,把那个null的列也写上,然后把数据导过去,删除源表再重命名新表

#6


表里有数据的情况下
bbb是新加的,肯定没有值,然后没有默认值,所以只能为null了,但是你有不允许为null。这个让数据库情何以堪呢?

建议先添加列,允许null。然后update把对应列值填上后,再修改为不允许为null。
或者按楼上的方法,弄到一张新表里,然后把表名改回来。

#7


引用 3 楼 tanshihou 的回复:
我这边提示,只能加允许NULL或者有默认值的列,
是不是我这个表里已经有数据了呀,

如果没有数据也许可以改


哦,那你的问题就是,你的bbb列已经存在了,这样确实没办法修改为not null,因为这个列中存在null值。

这个也简单,关键是你如何处理这种NULL值,我觉得可以先把这些null 替换为空串,也就是''

然后再用这个语句,设置为not null:

ALTER TABLE [dbo].[aaa] 
alter column  bbb SMALLINT NOT NULL

#8


你要分步加
第一步加一列没有任何约束的列
第二步给这列赋值
第三步给这列加非空约束