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

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

使用SQL server 2000。


只要列不是唯一标识符即可

UPDATE table set columnName = 0 where columnName is null

Then

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


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

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

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

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

你需要分两步完成:

更新表,使列中没有空值。

UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL

更改表以更改列的属性

ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

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

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT 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;

除此之外,阿巴契夫的回答似乎还不错。您不能重复更改—它会提示(至少在SQL Developer中)该列已经不是空的。


对于JDK (Oracle支持的Apache Derby发行版)中包含的内置javaDB,下面的方法对我来说是有效的

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

在外键约束的情况下…如果“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)

步骤3:

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

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

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

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

UPDATE myTable SET myColumn = 0

完成后,在设计视图中显示表(右击 表,点击“设计视图”),你可以取消勾选允许 像这样空列:

仍然在选定列的设计视图中,可以看到 下面窗口中的列属性,并设置默认值为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;

首先,确保您更改为not的列没有空值 从列_name为空的表中选择count(*) 输入缺失的值。你可以用空字符串、0、平均值、中值或插值值替换空值。这取决于你的后填充策略或前填充策略。 决定列值是唯一的还是非唯一的。如果它们需要是唯一的,那么就添加一个唯一的约束。否则,查看性能是否足够,或者是否需要添加索引。