我有一个表,有几个可空的整数列。出于几个原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT NULL。除了将null更改为0之外,还必须保留数据。
我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。
使用SQL server 2000。
我有一个表,有几个可空的整数列。出于几个原因,这是不可取的,因此我希望将所有空值更新为0,然后将这些列设置为NOT NULL。除了将null更改为0之外,还必须保留数据。
我正在寻找特定的SQL语法来更改列(称为ColumnA)为“非空”。假设数据已更新为不包含空值。
使用SQL server 2000。
当前回答
在外键约束的情况下…如果“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;
在我的情况下,我对张贴的答案有困难。我最终使用了以下方法:
ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
将VARCHAR(200)更改为您的数据类型,并可选择更改默认值。
如果你没有一个默认值,你将有一个问题,因为默认值将为null,从而产生冲突。
首先,确保您更改为not的列没有空值 从列_name为空的表中选择count(*) 输入缺失的值。你可以用空字符串、0、平均值、中值或插值值替换空值。这取决于你的后填充策略或前填充策略。 决定列值是唯一的还是非唯一的。如果它们需要是唯一的,那么就添加一个唯一的约束。否则,查看性能是否足够,或者是否需要添加索引。
您可以使用以下sql更改现有DB列的定义。
ALTER TABLE mytable modify mycolumn datatype NOT NULL;
对于JDK (Oracle支持的Apache Derby发行版)中包含的内置javaDB,下面的方法对我来说是有效的
alter table [table name] alter column [column name] not null;