我试过了:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
但它给出了这个错误信息:
ALTER TABLE 只允许添加可以包含空值或指定了 DEFAULT 定义的列
我试过了:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
但它给出了这个错误信息:
ALTER TABLE 只允许添加可以包含空值或指定了 DEFAULT 定义的列
作为一个选项,您可以最初创建 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;
如果您不允许该列为 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
并且没有 a default
,那么价值是多少?
由于 SQL Server 支持ADD CONSTRAINT
,我建议使用 Pavel 创建可空列的方法,然后在用非值NOT NULL
填充它后添加约束。NULL
这对我有用,也可以从设计视图中“借用”,进行更改->右键单击->生成更改脚本。
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`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"
更快的解决方案
如果您像我一样需要在包含大量数据的表上执行此操作,则 ADD-UPDATE-ALTER 选项非常慢(数百万行可能需要数小时)。
如果您也不想在表上使用默认值,这里是创建列和删除默认约束的完整代码(即使对于大型表也几乎是即时的):
ALTER TABLE my_table ADD column_name INT NOT NULL CONSTRAINT my_table_default_constraint DEFAULT 0
GO
ALTER TABLE my_table DROP CONSTRAINT my_table_default_constraint
GO
这适用于 SQL Server