我有一张表格,其中有几个可空的整数列。这是不理想的,因此我希望将所有的空值更新为0,然后将这些列设置为NOT NULL
。除了将空值更改为0
之外,必须保留数据。
我正在寻找将某个列(称之为ColumnA
)修改为“not null
”的具体SQL语法。假设数据已经更新,不包含空值。
使用 SQL Server 2000。
我有一张表格,其中有几个可空的整数列。这是不理想的,因此我希望将所有的空值更新为0,然后将这些列设置为NOT NULL
。除了将空值更改为0
之外,必须保留数据。
我正在寻找将某个列(称之为ColumnA
)修改为“not null
”的具体SQL语法。假设数据已经更新,不包含空值。
使用 SQL Server 2000。
首先,让所有当前的NULL
值消失:
UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
然后,更新表定义以禁止“NULL”:
ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
我遇到了同样的问题,但是该字段以前默认为null,现在我想将其默认为0。这需要在mdb的解决方案之后添加一行代码:
ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
你需要分两步来完成:
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
SET MyNullableColumn = 0
才有效。对于非数字类型,您需要设置另一个默认值,如空字符串或默认日期等。但是,这个答案完全符合上述问题并且是正确的;-) - Elyas Hadizadeh对于Oracle 11g,我可以按以下方式更改列属性:
ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
否则,abatichev的答案看起来很不错。您不能重复执行alter语句 - 它会抱怨(至少在SQL Developer中)该列已经不为null。这对我有用:
ALTER TABLE [Table]
Alter COLUMN [Column] VARCHAR(50) not null;
UPDATE table set columnName = 0 where columnName is null
然后
修改表并将该字段设置为非空,并指定默认值为0
如果存在FOREIGN KEY CONSTRAINT
,那么如果主键表中的列中没有'0',就会出现问题。 解决方法是...
步骤1:
使用以下代码禁用所有约束:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
第二步:
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"
这个看起来更简单,但只适用于Oracle:
ALTER TABLE [Table]
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;
此外,通过这种方式,您不仅可以更改表格属性,还可以添加列。
如果该值为空,则在此示例中更新为默认值(0)。
在我的情况下,我遇到了答案不清晰的困难。最终我使用了以下方法:
ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
VARCHAR(200)
更改为您的数据类型,可选择更改默认值。
NOT NULL
时会产生大量的日志记录。 - Martin Smith