【问题标题】:Change a column to not allow nulls将列更改为不允许空值
【发布时间】:2013-08-06 18:43:09
【问题描述】:

所以我想更改我的 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 是正确的,并且我正在尝试更改的列中当前没有空值,所以我真的不确定是什么导致了问题。有任何想法吗?我被难住了。

【问题讨论】:

  • 出现错误似乎表明您正在运行INSERT 或UPDATE 语句,而不是ALTER TABLE 语句。
  • 您是否 110% 确定该列中没有任何 nulls,错误提示存在。
  • @a_horse_with_no_name 不,这绝对是一个修改脚本
  • @TI 刚刚检查了两倍,有一些,不敢相信我错过了。将纠正它并回复您
  • 那句话没有错。绝对是流氓NULL的情况。可能是您要添加约束的原因。 =)

标签: sql-server null alter-column


【解决方案1】:

显然,该表中有 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 语句。

【讨论】:

    【解决方案2】:

    如果您尝试将列更改为非空值,并且收到此错误消息,但该列似乎没有空值,请确保您检查的是 is null 而不是 = null(这会给出不同的结果)。

    Select * from ... where column is null
    

    而不是

    Select * from ... where column = null
    

    我之所以添加这个,是因为它让我绊倒了,需要一段时间才能解决。

    【讨论】:

    • 那个也吸引了我。不错的收获。
    【解决方案3】:

    这会奏效。您应该发送一个默认值,然后在此示例中它将所有先前的记录更改为 -1。

    alter table [dbo].[mydatabase] alter column WeekInt int not null DEFAULT '-1';

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 2011-07-14
      • 2011-04-22
      • 2012-06-20
      • 2012-05-01
      • 2013-12-29
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      相关资源
      最近更新 更多