提问人:Karmic Coder 提问时间:3/27/2009 最后编辑:MarkoKarmic Coder 更新时间:5/1/2021 访问量:1567906
更改列:null 到非 null
Altering a column: null to not null
问:
我有一个表,它有几个可为 null 的整数列。由于多种原因,这是不可取的,因此我希望将所有空值更新为 0,然后将这些列设置为 .除了将 null 更改为 之外,还必须保留数据。NOT NULL
0
我正在寻找特定的 SQL 语法来将列(调用它)更改为“”。假设数据已更新为不包含 null。ColumnA
not null
使用 SQL Server 2000。
答:
只要该列不是唯一标识符
UPDATE table set columnName = 0 where columnName is null
然后
更改表并将字段设置为非 null,并指定默认值 0
首先,使所有当前值消失:NULL
UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
然后,更新表定义以禁止“NULL”:
ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
评论
您必须分两步完成:
- 更新表,使列中没有 null。
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
- 更改表以更改列的属性
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
评论
SET MyNullableColumn = 0
仅当现有列为数值列时才有效。对于非数字类型,您需要设置另一个默认值,例如空字符串或默认日期等。但这个答案与上述问题完全相关并且是正确的;
这似乎更简单,但仅适用于 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;
否则,阿巴蒂切夫的回答似乎不错。您不能重复更改 - 它抱怨(至少在 SQL Developer 中)该列已经不为 null。
评论
对于 JDK(Oracle 支持的 Apache Derby 发行版)中包含的内置 javaDB,以下内容对我有用
alter table [table name] alter column [column name] not null;
万一......如果主键表的列中不存在“0”,则会出现问题。解决方案是......FOREIGN KEY CONSTRAINT
步骤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 中将列设置为非 null 并添加默认值。
- 正如其他人已经指出的那样,您不能设置“not null”,直到所有 现有数据为“非 null”,如下所示:
UPDATE myTable SET myColumn = 0
- 完成后,将表格置于设计视图中(右键单击 表,然后单击“设计视图”),您只需取消选中“允许”即可 像这样为 Null 列:
- 仍然在选择列的设计视图中,您可以在下面的窗口中看到列属性,并将默认值设置为 0,如下所示:
就我而言,我对发布的答案有困难。我最终使用了以下内容:
ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
更改为数据类型,并选择性地更改默认值。VARCHAR(200)
如果没有默认值,则在进行此更改时会遇到问题,因为默认值为 null,从而产生冲突。
您可以使用以下 sql 更改现有数据库列的定义。
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 的列没有 null 值 从表中选择 count(*),其中 column's_name 为 null
插补缺失值。您可以将 null 替换为空字符串或 0、平均值或中值或插值。这取决于您的回填策略或正向填充策略。
确定列值是必须是唯一的还是非唯一的。如果它们需要是唯一的,则添加唯一约束。否则,请查看性能是否足够,或者是否需要添加索引。
评论
NOT NULL