当前位置:  开发笔记 > 编程语言 > 正文

更改列:null为非null

如何解决《更改列:null为非null》经验,为你挑选了7个好方法。

我有一个表有几个可以为空的整数列.由于多种原因,这是不可取的,所以我希望将所有空值更新为0,然后将这些列设置为NOT NULL.除了将空值更改为0,必须保留数据.

我正在寻找特定的SQL语法来将列(调用它ColumnA)改为" not null".假设数据已更新为不包含空值.

使用SQL Server 2000.



1> mdb..:

首先,使所有当前的NULL值消失:

UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL

然后,更新表定义以禁止NULL:

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL


如果您输入错字并且数据库爆炸,请先备份您的数据库.
让我对上述两个正确答案进行增值.NULL的语义可以有一些含义.其中一个常见的意思是UNKNOWN.以SCORE为例.一个空的SCORE和一个ZERO SCORE是一个与众不同的世界!在您完成上述建议之前.确保应用程序在其业务逻辑中不采用null.
奇怪的是MS SQL Management Studio不允许这个选项,它吹嘘"Dropping table ..."
应始终备份数据库.您永远不知道您的某个人何时可以编写和更新或删除语句并忘记WHERE子句.
@SebastianGodelet:有一个设置允许你关闭该警告,或者使它不会阻止你修改表.在某些情况下,更改表的架构需要创建一个新表,删除从旧表和旧表复制的数据.由于此过程中的错误可能导致数据丢失,因此SSMS会向您发出警告,并且默认情况下会阻止您执行此操作.

2> Greg Dougher..:

我有同样的问题,但该字段用于默认为null,现在我想将其默认为0.这需要在mdb的解决方案后再添加一行:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];


实际上,没有不清楚"再增加一行"意味着"除上述答案之外"(特别是因为上面有很多答案) - 如果这就是你的意思,那么措辞确实需要改变,你应该包括你所指的答案的行
您是否阅读过有关"再添加一行"的部分?如此,这是除了上述答案之外?

3> Ralph Wiggum..:

您必须分两步完成:

    更新表,以便列中没有空值.

UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL

    更改表以更改列的属性

ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL



4> 小智..:

对于Oracle 11g,我能够更改列属性,如下所示:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

否则abatichev的回答似乎很好.你不能重复改变 - 它抱怨(至少在SQL Developer中)该列已经不是null.



5> 小智..:

这对我有用:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;



6> Eppz..:

只要该列不是唯一标识符

UPDATE table set columnName = 0 where columnName is null

然后

更改表并将字段设置为非null并指定默认值0



7> csomakk..:

这似乎更简单,但只适用于Oracle:

ALTER TABLE [Table] 
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;

此外,通过这种方式,您还可以添加列,而不仅仅是更改列.如果值为null,则在此示例中更新为默认值(0).

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有