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

我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。

使用SQL server 2000。


当前回答

你需要分两步完成:

更新表,使列中没有空值。

UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL

更改表以更改列的属性

ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

其他回答

在外键约束的情况下…如果“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)

步骤3:

使用以下代码启用所有约束:

exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

这招对我很管用:

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

对于JDK (Oracle支持的Apache Derby发行版)中包含的内置javaDB,下面的方法对我来说是有效的

alter table [table name] alter column [column name] not null;

这看起来更简单,但只适用于Oracle:

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

此外,您还可以使用它添加列,而不仅仅是更改它。 如果默认值为空,则更新为本例中的默认值(0)。

你需要分两步完成:

更新表,使列中没有空值。

UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL

更改表以更改列的属性

ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL