插入一个NOT NULL列到现有的表

我努力了:

ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL; 

但它给出了这个错误消息:

ALTER TABLE只允许添加可以包含空值或指定了DEFAULT定义的列

作为一个选项,您最初可以创build可空列,然后使用有效的非空值更新您的表列,最后使用ALTER列来设置NOT NULL约束:

 ALTER TABLE MY_TABLE ADD STAGE INT NULL GO UPDATE MY_TABLE SET <a valid not null values for your column> GO ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL GO 

另一种select是为列指定正确的默认值:

 ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0' 

UPD:请注意,上面的答案包含GO ,这是在Microsoft SQL Server上运行此代码时必须的。 如果你想在Oracle或MySQL上执行相同的操作,你需要使用分号; 像那样:

 ALTER TABLE MY_TABLE ADD STAGE INT NULL; UPDATE MY_TABLE SET <a valid not null values for your column>; ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL; 

如果您不允许该列为空,则需要提供缺省值以填充现有行。 例如

 ALTER TABLE dbo.YourTbl ADD newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0 

在企业版上,这是自2012年以来仅有的元数据变更

错误消息是相当具有描述性的,请尝试:

 ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-'; 

其他SQL实现也有类似的限制。 原因是添加列需要为该列添加值(逻辑上,即使不是物理上的),该列默认为NULL 。 如果你不允许NULL ,并且没有default ,那么值是什么?

由于SQL Server支持ADD CONSTRAINT ,因此我build议Pavel创build一个可空列的方法,然后在用非NULL值填充后添加一个NOT NULL约束。

这对我有用,也可以从devise视图“借用”,进行修改 – >右键单击 – >生成更改脚本。

 BEGIN TRANSACTION GO ALTER TABLE dbo.YOURTABLE ADD YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0 GO COMMIT 
 ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;