更改列:null to not null

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

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

使用SQL服务器2000

1530935 次浏览

只要该列不是唯一标识符

UPDATE table set columnName = 0 where columnName is null

然后

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

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

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

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

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

你必须分两步来做:

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

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

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

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

这对我有用:

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

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

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

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

除此之外,abatichev的回答看起来不错,你不能重复这个修改——它抱怨(至少在SQLDeveloper中)这个列已经不为空了。

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

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

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"

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

  1. 正如其他人已经说过的,你不能设置"not null"直到所有存量数据不为空,如下所示:

UPDATE myTable SET myColumn = 0

  1. 完成后,在设计视图中使用表(右键单击表格并单击“设计视图”),您可以取消选中允许空值列如下:

在此处输入图片描述

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

在此处输入图片描述

在我的例子中,我对发布的答案有困难。我最终使用了以下内容:

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

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

如果您没有默认值,则在进行此更改时会遇到问题,因为默认值为null会创建冲突。

您可以使用以下sql更改现有DB列的定义。

ALTER TABLE mytable modify mycolumn datatype NOT NULL;

让我们举个例子:

TABLE NAME=EMPLOYEE

我想将列EMPLOYEE_NAME更改为NOT NULL。此查询可用于任务:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
  1. 首先确保您更改为not的列没有空值从列s_name为空的表中选择计数(*)

  2. 导入缺失的值。您可以用空字符串或0或平均值或中值或插值值替换空值。这取决于您的回填策略或前向填充策略。

  3. 确定列值是否需要唯一或非唯一。如果它们需要唯一,则添加唯一约束。否则,查看性能是否足够或是否需要添加索引。