我有一个表,有几个可空的整数列。出于几个原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT NULL。除了将null更改为0之外,还必须保留数据。
我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。
使用SQL server 2000。
我有一个表,有几个可空的整数列。出于几个原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT NULL。除了将null更改为0之外,还必须保留数据。
我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。
使用SQL server 2000。
当前回答
这看起来更简单,但只适用于Oracle:
ALTER TABLE [Table]
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;
此外,您还可以使用它添加列,而不仅仅是更改它。 如果默认值为空,则更新为本例中的默认值(0)。
其他回答
这招对我很管用:
ALTER TABLE [Table]
Alter COLUMN [Column] VARCHAR(50) not null;
在SSMS GUI中也可以使列不为空和添加默认值。
正如其他人已经指出的,您不能设置“not null”直到所有 现有数据为“非空”,如下所示:
UPDATE myTable SET myColumn = 0
完成后,在设计视图中显示表(右击 表,点击“设计视图”),你可以取消勾选允许 像这样空列:
仍然在选定列的设计视图中,可以看到 下面窗口中的列属性,并设置默认值为0,如下所示:
您可以使用以下sql更改现有DB列的定义。
ALTER TABLE mytable modify mycolumn datatype NOT NULL;
你需要分两步完成:
更新表,使列中没有空值。
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
更改表以更改列的属性
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
对于Oracle 11g,我能够更改列属性如下:
ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
除此之外,阿巴契夫的回答似乎还不错。您不能重复更改—它会提示(至少在SQL Developer中)该列已经不是空的。