更改列:null 到不为 null

我有一个表,其中包含几个可为空的整数列。由于多种原因,这是不可取的,因此我希望将所有 null 更新为 0,然后将这些列设置为NOT NULL 。除了将 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

我遇到了同样的问题,但是该字段曾经默认设置为 null,现在我想将其默认设置为 0。这需要在 mdb 的解决方案之后再添加一行:

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

您将必须分两个步骤进行操作:

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

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

否则,阿巴蒂切夫的答案似乎很好。您无法重复更改 - 它抱怨(至少在 SQL Developer 中)该列已经不为空。

这为我工作:

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

只要该列不是唯一标识符

UPDATE table set columnName = 0 where columnName is null

然后

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

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

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

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

就我而言,我在张贴答案时遇到困难。我最终使用以下内容:

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

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

如果您没有默认值,那么进行此更改将会遇到问题,因为默认值将为 null,从而产生冲突。

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

步骤 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)

第三步:

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

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

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

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