Altering a column: null to not null
我有一个表,它有几个可以为空的整数列。由于多种原因,这是不可取的,所以我希望将所有空值更新为0,然后将这些列设置为
我正在寻找将列(称为
使用SQL Server 2000。
首先,使所有当前空值消失:
1 | UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL |
然后,更新表定义以不允许空值:
1 | ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL |
我也有同样的问题,但是这个字段以前默认为空,现在我想默认为0。这需要在mdb的解决方案之后再添加一行:
1 | ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column]; |
您必须分两步完成:
1 2 | UPDATE MyTable SET MyNullableColumn = 0 WHERE MyNullableColumn IS NULL |
1 2 | ALTER TABLE MyTable ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL |
对于Oracle11g,我可以更改column属性,如下所示:
1 | ALTER TABLE tablename MODIFY columnname datatype NOT NULL; |
否则,阿巴蒂切夫的回答似乎不错。不能重复alter-它抱怨(至少在SQL开发人员中)列已经不是空的。
这对我很有用:
1 2 | ALTER TABLE [Table] Alter COLUMN [Column] VARCHAR(50) not null; |
只要列不是唯一标识符
1 | UPDATE table set columnName = 0 where columnName is null |
然后
更改表并将字段设置为非空并指定默认值0
这看起来更简单,但只适用于Oracle:
1 2 | ALTER TABLE [Table] ALTER [Column] NUMBER DEFAULT 0 NOT NULL; |
此外,通过这个,您还可以添加列,而不仅仅是更改它。如果值为空,它将更新为本例中的默认值(0)。
在我的例子中,我对张贴的答案有困难。我最终使用了以下方法:
1 | ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT ''; |
将
如果没有默认值,则进行此更改时会遇到问题,因为默认值为空会导致冲突。
如果是
步骤1:
使用此代码禁用所有约束:
1 | EXEC sp_msforeachtable"ALTER TABLE ? NOCHECK CONSTRAINT all" |
第二步:
1 2 | RUN UPDATE COMMAND (as mentioned in above comments) RUN ALTER COMMAND (as mentioned in above comments) |
步骤3:
使用此代码启用所有约束:
1 | exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" |
让我们举个例子:
1 | TABLE NAME=EMPLOYEE |
我想把EDOCX1列(3)改为EDOCX1列(4)。此查询可用于任务:
1 | ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL; |
也可以在SSMS GUI中使列不为空并添加默认值。
对于JDK(Oracle支持的ApacheDerby发行版)中包含的内置JavaDB,下面的内容适用于我。
1 | alter table [table name] alter column [column name] not null; |
可以使用以下SQL更改现有数据库列的定义。
1 | ALTER TABLE mytable modify mycolumn datatype NOT NULL; |