我有一个表,其中包含几个可为空的整数列。由于多种原因,这是不可取的,因此我希望将所有 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];
您将必须分两个步骤进行操作:
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
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;