首页 文章

更改列:null为非null

提问于
浏览
1078

我有一个表有几个可以为空的整数列 . 由于多种原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为 NOT NULL . 除了将空值更改为 0 之外,还必须保留数据 .

我正在寻找特定的SQL语法来将列(称为 ColumnA )更改为“ not null ” . 假设数据已更新为不包含空值 .

使用SQL Server 2000 .

12 回答

  • 5

    我有同样的问题,但该字段用于默认为null,现在我想将其默认为0.这需要在mdb的解决方案后再添加一行:

    ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
    
  • 49

    您可以使用以下sql更改现有数据库列的定义 .

    ALTER TABLE mytable modify mycolumn datatype NOT NULL;
    
  • 3

    首先,使所有当前的NULL值消失:

    UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
    

    然后,更新表定义以禁止NULL:

    ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
    
  • 17

    您必须分两步完成:

    • 更新表,以使列中没有空值 .
    UPDATE MyTable SET MyNullableColumn = 0
    WHERE MyNullableColumn IS NULL
    
    • 更改表以更改列的属性
    ALTER TABLE MyTable
    ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
    
  • 2

    这似乎更简单,但只适用于Oracle:

    ALTER TABLE [Table] 
    ALTER [Column] NUMBER DEFAULT 0 NOT NULL;
    

    此外,使用此功能,您还可以添加列,而不仅仅是更改列 . 如果值为null,则在此示例中更新为默认值(0) .

  • 0

    在我的情况下,我对发布的答案有困难 . 我最终使用了以下内容:

    ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
    

    VARCHAR(200) 更改为您的数据类型,并可以选择更改默认值 .

    如果您没有默认值,则在进行此更改时会出现问题,因为默认值为null会产生冲突 .

  • 1

    使列不为空并添加默认值也可以在SSMS GUI中完成 .

    • 正如其他人已经说过的那样,在所有现有数据都是_172498之前,你不能设置"not null":

    UPDATE myTable SET myColumn = 0

    • 完成后,使用设计视图中的表(右键单击表并单击"design view"),您可以取消选中Allow Nulls列,如下所示:

    • 仍然在选择了列的设计视图中,您可以在下面的窗口中看到列属性,并将默认值设置为0,如下所示:

  • 1799

    如果 FOREIGN KEY CONSTRAINT ...如果主键表列中没有'0'则会出现问题 . 解决方案是......

    STEP1:

    使用此代码禁用所有约束:

    EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
    

    STEP2:

    RUN UPDATE COMMAND (as mentioned in above comments)
    RUN ALTER COMMAND (as mentioned in above comments)
    

    STEP3:

    使用以下代码启用所有约束:

    exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
    
  • 32

    对于JDK中包含的内置javaDB(Oracle支持的Apache Derby发行版),下面的内容对我有用

    alter table [table name] alter column [column name] not null;
    
  • 16

    这对我有用:

    ALTER TABLE [Table] 
    Alter COLUMN [Column] VARCHAR(50) not null;
    
  • 0

    只要该列不是唯一标识符

    UPDATE table set columnName = 0 where columnName is null
    

    然后

    更改表并将字段设置为非null并指定默认值0

  • 21

    对于Oracle 11g,我能够更改列属性,如下所示:

    ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
    

    否则abatichev的回答似乎很好 . 你不能重复alter - 它抱怨(至少在SQL Developer中)该列已经不是null .

相关问题