关于sql server:更改列:null为非null

Altering a column: null to not null

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

我正在寻找将列(称为ColumnA)更改为"NOT NULL"的特定SQL语法。假设数据已更新为不包含空值。

使用SQL Server 2000。


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

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

然后,更新表定义以不允许空值:

1
ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL


我也有同样的问题,但是这个字段以前默认为空,现在我想默认为0。这需要在mdb的解决方案之后再添加一行:

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


您必须分两步完成:

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

    对于Oracle11g,我可以更改column属性,如下所示:

    1
    ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

    否则,阿巴蒂切夫的回答似乎不错。不能重复alter-它抱怨(至少在SQL开发人员中)列已经不是空的。


    这对我很有用:

    1
    2
    ALTER TABLE [Table]
    Alter COLUMN [Column] VARCHAR(50) not null;

    只要列不是唯一标识符

    1
    UPDATE table set columnName = 0 where columnName is null

    然后

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


    这看起来更简单,但只适用于Oracle:

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

    此外,通过这个,您还可以添加列,而不仅仅是更改它。如果值为空,它将更新为本例中的默认值(0)。


    在我的例子中,我对张贴的答案有困难。我最终使用了以下方法:

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

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

    如果没有默认值,则进行此更改时会遇到问题,因为默认值为空会导致冲突。


    如果是FOREIGN KEY CONSTRAINT…如果主键表的列中不存在"0",则会出现问题。解决办法是…

    步骤1:

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

    1
    EXEC sp_msforeachtable"ALTER TABLE ? NOCHECK CONSTRAINT all"

    第二步:

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

    步骤3:

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

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

    让我们举个例子:

    1
    TABLE NAME=EMPLOYEE

    我想把EDOCX1列(3)改为EDOCX1列(4)。此查询可用于任务:

    1
    ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;


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

  • 正如其他人已经说过的,您不能将"not null"设置为现有数据为"非空",如下所示:
  • UPDATE myTable SET myColumn = 0

  • 完成后,在"设计"视图中使用表(右键单击表并单击"设计视图"),您只需取消选中"允许"空列如下:
  • enter image description here

  • 仍在选中列的设计视图中,可以看到以下窗口中的列属性,并在其中将默认值设置为0,如下所示:
  • enter image description here


    对于JDK(Oracle支持的ApacheDerby发行版)中包含的内置JavaDB,下面的内容适用于我。

    1
    alter table [table name] alter column [column name] not null;

    可以使用以下SQL更改现有数据库列的定义。

    1
    ALTER TABLE mytable modify mycolumn datatype NOT NULL;