1314

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

我正在寻找将列(调用它)更改为“ ”的特定 SQL 语法。假设数据已更新为不包含空值。ColumnAnot null

使用SQL 服务器 2000

4

14 回答 14

2133

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

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

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

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
于 2009-03-27T13:30:09.223 回答
61

我遇到了同样的问题,但是该字段过去默认为null,现在我想将其默认为0。这需要在mdb的解决方案之后再添加一行:

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
于 2012-06-15T20:45:23.720 回答
40

您必须分两步完成:

  1. 更新表,使列中没有空值。
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. 更改表以更改列的属性
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
于 2009-03-27T13:34:29.637 回答
29

对于 Oracle 11g,我可以按如下方式更改列属性:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

否则,阿巴蒂切夫的回答似乎不错。您不能重复更改 - 它抱怨(至少在 SQL Developer 中)该列已经不为空。

于 2012-09-17T21:13:23.727 回答
18

这对我有用:

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
于 2012-06-05T13:00:20.240 回答
15

只要列不是唯一标识符

UPDATE table set columnName = 0 where columnName is null

然后

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

于 2009-03-27T13:26:39.687 回答
5

万一FOREIGN KEY CONSTRAINT……如果主键表的列中不存在“0”,则会出现问题。解决方案是...

第1步:

使用此代码禁用所有约束:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

第2步:

RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)

第三步:

使用此代码启用所有约束:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
于 2014-11-27T17:13:41.450 回答
4

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

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

此外,有了这个,您还可以添加列,而不仅仅是更改它。在本例中,如果值为 null,它会更新为默认值 (0)。

于 2012-03-04T07:55:36.317 回答
4

就我而言,我在发布答案时遇到了困难。我最终使用了以下内容:

ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';

更改VARCHAR(200)为您的数据类型,并可选择更改默认值。

如果您没有默认值,则在进行此更改时会遇到问题,因为默认值为 null 会产生冲突。

于 2017-01-26T19:39:31.710 回答
1

使列不为空并添加默认值也可以在 SSMS GUI 中完成。

  1. 正如其他人已经说过的那样,在所有现有数据都为“非空”之前,您不能设置“非空”,如下所示:

UPDATE myTable SET myColumn = 0

  1. 完成后,在设计视图中使用表(右键单击表并单击“设计视图”),您可以取消选中Allow Nulls列,如下所示:

在此处输入图像描述

  1. 仍然在选择列的设计视图中,您可以在下面的窗口中看到 列属性,并将默认设置为 0,如下所示:

在此处输入图像描述

于 2015-12-15T03:14:40.910 回答
1

举个例子:

TABLE NAME=EMPLOYEE

我想将列更改EMPLOYEE_NAMENOT NULL. 此查询可用于以下任务:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
于 2019-04-26T11:58:51.410 回答
0

对于 JDK 中包含的内置 javaDB(Oracle 支持的 Apache Derby 发行版),以下内容对我有用

alter table [table name] alter column [column name] not null;
于 2014-06-13T00:45:53.163 回答
0

您可以使用以下 sql 更改现有 DB 列的定义。

ALTER TABLE mytable modify mycolumn datatype NOT NULL;
于 2018-11-12T09:03:48.927 回答
0
  1. 首先确保您更改为没有的列没有空值 select count(*) from table where column's_name is null

  2. 估算缺失值。您可以用空字符串或 0 或平均值或中值或插值替换空值。这取决于您的回填策略或前向填充策略。

  3. 决定列值是唯一的还是非唯一的。如果它们需要唯一而不是添加唯一约束。否则,请查看性能是否足够或是否需要添加索引。

于 2021-04-30T20:51:19.117 回答