我有一个有几个可以为空的整数列的表。出于多种原因,这是不可取的,因此我希望将所有空值更新为 0,然后将这些列设置为NOT NULL. 除了将 null 更改为 之外0,还必须保留数据。
我正在寻找将列(调用它)更改为“ ”的特定 SQL 语法。假设数据已更新为不包含空值。ColumnAnot null
使用SQL 服务器 2000。
我有一个有几个可以为空的整数列的表。出于多种原因,这是不可取的,因此我希望将所有空值更新为 0,然后将这些列设置为NOT NULL. 除了将 null 更改为 之外0,还必须保留数据。
我正在寻找将列(调用它)更改为“ ”的特定 SQL 语法。假设数据已更新为不包含空值。ColumnAnot null
使用SQL 服务器 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];
您必须分两步完成:
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
对于 Oracle 11g,我可以按如下方式更改列属性:
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
万一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"
这似乎更简单,但仅适用于 Oracle:
ALTER TABLE [Table]
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;
此外,有了这个,您还可以添加列,而不仅仅是更改它。在本例中,如果值为 null,它会更新为默认值 (0)。
就我而言,我在发布答案时遇到了困难。我最终使用了以下内容:
ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
更改VARCHAR(200)为您的数据类型,并可选择更改默认值。
如果您没有默认值,则在进行此更改时会遇到问题,因为默认值为 null 会产生冲突。
举个例子:
TABLE NAME=EMPLOYEE
我想将列更改EMPLOYEE_NAME为NOT NULL. 此查询可用于以下任务:
ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
对于 JDK 中包含的内置 javaDB(Oracle 支持的 Apache Derby 发行版),以下内容对我有用
alter table [table name] alter column [column name] not null;
您可以使用以下 sql 更改现有 DB 列的定义。
ALTER TABLE mytable modify mycolumn datatype NOT NULL;
首先确保您更改为没有的列没有空值 select count(*) from table where column's_name is null
估算缺失值。您可以用空字符串或 0 或平均值或中值或插值替换空值。这取决于您的回填策略或前向填充策略。
决定列值是唯一的还是非唯一的。如果它们需要唯一而不是添加唯一约束。否则,请查看性能是否足够或是否需要添加索引。