改变列:null为非null

我有一个表有几个可空的整数列。 这是由于几个原因不受欢迎,所以我正在寻找更新所有空值为0,然后将这些列设置为NOT NULL 。 除了将空值更改为0 ,还必须保留数据。

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

使用SQL Server 2000

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

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

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

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

我有同样的问题,但用于默认为空的字段,现在我想默认它为0.这需要在mdb的解决scheme后添加一行:

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

您将需要分两步进行:

  1. 更新表,以便列中没有空值。

    UPDATE MyTable SET MyNullableColumn = 0 WHERE MyNullableColumn IS NULL

  2. 改变表格来改变列的属性

    ALTER TABLE MyTable ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

对于Oracle 11g,我可以按如下方式更改列属性:

 ALTER TABLE tablename MODIFY columnname datatype NOT NULL; 

否则abatichev的答案似乎很好。 你不能重复更改 – 它抱怨(至less在SQL Developer中)该列已经不是空的。

只要该列不是唯一的标识符

 UPDATE table set columnName = 0 where columnName is null 

然后

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

这对我工作:

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

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

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

另外,用这个,你也可以添加列,而不只是改变它。 在这个例子中,它更新为默认值(0),如果值为null。

FOREIGN KEY CONSTRAINT情况下,如果在主键表的列中不存在“0”,则会出现问题。 解决scheme是…

步骤1:

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

 EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

第2步:

 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" 

在我的情况下,我对发布的答案有困难。 我结束了使用以下内容:

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

VARCHAR(200)更改为您的数据types,并可以select更改默认值。

如果你没有默认值,你将会有一个问题做出这个改变,因为默认情况下将是空创build一个冲突。

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

  1. 正如其他人已经指出,你不能设置“不为空”,直到所有现有的数据是“非空”,如下所示:

UPDATE myTable SET myColumn = 0

  1. 完成之后,在devise视图中(右键单击表格并单击“devise视图”),您可以取消选中允许空列:

在这里输入图像说明

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

在这里输入图像说明

对于包含在JDK中的内置javaDB(Oracle支持的Apache Derby的发行版),下面的代码对我很有帮助

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