插入一个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`;