SQL 如何把现有字段设为not null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 如何把现有字段设为not null相关的知识,希望对你有一定的参考价值。

RT 只求速度
要T-SQL语句写
modify 我为啥用不了?他说这周围有错误?
一直在刷新呀。。快来人把。。。

在默认的情况下,表的列接受 NULL 值。

SQL NOT NULL 约束

    NOT NULL 约束强制列不接受 NULL 值。

    NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

下面的 SQL 强制 “ID” 列、 “LastName” 列以及 “FirstName” 列不接受 NULL 值:

-from shulanxt

参考技术A alter table 表名
alter column 字段名 类型 not null
例如:
alter table a;
alter column name char(20) not null
参考技术B 如果在本字段上有约束,先将约束删除再用“CrazyHerozk”说的办法处理。
第一步:删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名
第二步:创建
alter table 表名 column 字段名 字段类型 not null
注,把第二句话中的字段类型写上试下看本回答被提问者采纳
参考技术C 1.如果在本字段上有约束,先将约束删除再用 alter table 表名 modify 列名 not null; 的办法处理。
2. 第一步:删除约束
3.ALTER TABLE 表名 DROP CONSTRAINT 约束名
4.第二步:创建
5.alter table 表名 column 字段名 字段类型 not null
6.注,把第二句话中的字段类型写上
参考技术D isnull(字段名,'') 或者isnull(字段名,0)
我用的SQLSERVER
字段为字符串时用第一个,数字是用第二个
只是提供一个思路,希望对你有帮助...

将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`;

以上是关于SQL 如何把现有字段设为not null的主要内容,如果未能解决你的问题,请参考以下文章

sql如何把查询到的NULL替换成空值''

如何添加 NOT NULL 约束以及列的默认值?

现有个表,名称是test,里面的字段是id,int类型,我想用sql语句把这个字段改为unsigned类型,如何写这条语句

sql如何空值替换成null?

如何在sql中同时测试null和not null?

SQL 数据库ABC字段为null 要把ABC字段更改为not null,怎么改?