sql server table语法 更改列:null为非空




mysql alter table not null (9)

我有一个表有几个可为空的整数列。 这是由于几个原因不受欢迎,所以我正在寻找更新所有空值为0,然后将这些列设置为NOT NULL 。 除了将空值更改为0 ,还必须保留数据。

我正在寻找特定的SQL语法来将列(称为ColumnA )更改为“ not null ”。 假设数据已更新为不包含空值。

使用SQL Server 2000


在我的情况下,我对发布的答案有困难。 我结束了使用以下内容:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

VARCHAR(200)更改为您的数据类型,并可以选择更改默认值。

如果你没有默认值,你将会遇到问题,因为默认情况下会产生冲突。


使列不为空并添加默认值也可以在SSMS GUI中完成。

  1. 正如其他人已经指出的那样,除非所有现有数据都是“非空”,否则不能设置“不为空”,如下所示:

UPDATE myTable SET myColumn = 0

  1. 完成后,在设计视图中的表格(右键单击表格并单击“设计视图”),您可以取消选中允许空列:

  1. 仍然在设计视图中选中列,您可以在下面的窗口中看到列属性 ,并在其中将默认值设置为0,如下所示:


对于Oracle 11g,我可以按如下方式更改列属性:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

否则,abatichev的答案看起来不错。 你不能重复更改 - 它抱怨(至少在SQL Developer中)该列已经不是空的。


首先,使所有当前的NULL值消失:

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

然后,更新表定义以禁止NULL:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL

这对我有用:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;

只要该列不是唯一标识符

UPDATE table set columnName = 0 where columnName is null

然后

改变表格并将字段设置为非空值并指定默认值0


对于JDK中包含的内置javaDB(Oracle支持的Apache Derby的发行版),以下工作适用于我

alter table [table name] alter column [column name] not 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"

这看起来更简单,但只适用于Oracle:

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

此外,借此,您还可以添加列,而不仅仅是修改它。 如果该值为空,它会在此示例中更新为默认值(0)。





alter-column