我试过了:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
但它提供了此错误消息:
ALTER TABLE仅允许添加可包含空值或列的列 指定了DEFAULT定义
答案 0 :(得分:191)
作为一个选项,您最初可以创建Null-able列,然后使用有效非空值更新表列,最后使用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
另一种选择是为列指定正确的默认值:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD:请注意,上面的答案包含GO
,这是在Microsoft SQL服务器上运行此代码时必须的。如果要在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;
答案 1 :(得分:12)
如果您不允许列为空,则需要提供默认值以填充现有行。 e.g。
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
在Enterprise Edition上,这是自2012年以来的metadata only change
答案 2 :(得分:5)
错误消息非常具有描述性,请尝试:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
答案 3 :(得分:3)
Other SQL implementations have similar restrictions.原因是添加列需要为该列添加值(逻辑上,即使不是物理上的),默认为NULL
。如果您不允许NULL
,并且没有default
,那么价值是多少?
由于SQL Server支持ADD CONSTRAINT
,我建议使用Pavel创建可空列的方法,然后在用非NOT NULL
值填充后添加NULL
约束
答案 4 :(得分:2)
这对我有用,也可以从设计视图“借用”,进行更改 - &gt;右键单击 - &gt;生成变更脚本。
BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
答案 5 :(得分:1)
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
答案 6 :(得分:0)
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"