将列更改为不允许为空

19

我想将SQL Server数据库中的某一列更改为不允许为空,但我一直遇到错误。这是我正在使用的SQL语句:

alter table [dbo].[mydatabase] alter column WeekInt int not null

这是我遇到的错误:

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'WeekInt', table 'CustomerRadar.dbo.tblRWCampaignMessages'; column does not allow nulls. UPDATE fails.
The statement has been terminated.

我相当肯定我的 SQL 是正确的,而且当前正在更改的列中没有空值,因此我真的不确定是什么原因导致了问题。有什么想法吗?我很困惑。


错误似乎表明您正在运行一个INSERTUPDATE语句,而不是一个ALTER TABLE语句。 - user330315
3
你能否百分之百确定那一列没有任何"null"值,出错信息表明可能存在。 - T I
@a_horse_with_no_name 不,这绝对是一个修改脚本。 - user2255811
@TI 我刚刚仔细检查了一遍,发现有几个问题,真不敢相信我居然错过了。我会纠正它并回复你的。 - user2255811
1
这个语句没有问题。明显是空值的问题。很可能是你想要添加约束的原因。=) - Eric Hauenstein
3个回答

18

显然,这个表里有NULL值。你可以使用以下方法进行检查:

select *
from mydatabase
where WeekInt is NULL;

接下来,你可以选择以下两种方式之一。要么更改这些值:

update mydatabase
    set WeekInt = -1
    where WeekInt is null;

或者删除有问题的行:

delete from mydatabase
    where WeekInt is null;

然后,当所有的值都没问题时,你可以执行alter table语句。


1
如果您尝试将一个列更改为非空,并且收到此错误消息,但似乎该列没有空值,请确保检查 is null 而不是 = null(它们会产生不同的结果)。
Select * from ... where column is null

替代

Select * from ... where column = null

我之所以添加这个是因为它让我困扰了一段时间,需要一些时间来解决。


那个也让我困惑了。很好的发现。 - PongGod

0

这个方法可行。你应该发送一个默认值,然后在这个例子中它会将所有之前的记录更改为-1。

修改表[dbo].[mydatabase]的列WeekInt为int类型,非空且默认值为'-1'。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接