我有一个表有几个可以为空的整数列。由于多种原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT 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
对于JDK中包含的内置javaDB(Oracle支持的Apache Derby发行版),下面对我有用
alter table [table name] alter column [column name] not null;
我们来举个例子:
TABLE NAME=EMPLOYEE
我想将列EMPLOYEE_NAME
更改为NOT NULL
。此查询可用于任务:
ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
您可以使用以下sql更改现有数据库列的定义。
ALTER TABLE mytable modify mycolumn datatype 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;
否则abatichev的回答似乎很好。你不能重复改变 - 它抱怨(至少在SQL Developer中)该列已经不是null。
这对我有用:
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;
此外,通过这种方式,您还可以添加列,而不仅仅是更改列。如果值为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)
STEP3:
使用以下代码启用所有约束:
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"