将NOT NULL列插入现有表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将NOT NULL列插入现有表相关的知识,希望对你有一定的参考价值。

我试过了:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

但它给出了此错误消息:

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

答案

作为一个选项,您最初可以创建Null-able列,然后使用有效的非null值更新表列,最后使用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;
另一答案

如果您不允许列为空,则需要提供默认值来填充现有行。例如

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

在企业版上,这是自2012年以来的metadata only change

另一答案

错误消息非常具有描述性,请尝试:

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
另一答案

Other SQL implementations have similar restrictions.原因是添加列需要为该列添加值(逻辑上,即使不是物理上的),默认为NULL。如果你不允许NULL,并且没有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`;

以上是关于将NOT NULL列插入现有表的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?

怎么样将视频转换成gif?

如何将多个文件进行合并?