Sql server 将列:null更改为notnull
我有一个表,它有几个可为空的整数列。由于几个原因,这是不可取的,因此我希望将所有空值都更新为0,然后将这些列设置为Sql server 将列:null更改为notnull,sql-server,tsql,null,alter-table,alter-column,Sql Server,Tsql,Null,Alter Table,Alter Column,我有一个表,它有几个可为空的整数列。由于几个原因,这是不可取的,因此我希望将所有空值都更新为0,然后将这些列设置为非空。除了将空值更改为0,还必须保留数据 我正在寻找将一列(称之为ColumnA)更改为“notnull”的特定SQL语法。假设数据已更新为不包含空值 使用SQL server 2000。只要列不是唯一标识符 UPDATE table set columnName = 0 where columnName is null 然后 更改表格并将字段设置为非空,并指定默认值0,首先,使所
非空
。除了将空值更改为0
,还必须保留数据
我正在寻找将一列(称之为ColumnA
)更改为“notnull
”的特定SQL语法。假设数据已更新为不包含空值
使用SQL server 2000。只要列不是唯一标识符
UPDATE table set columnName = 0 where columnName is null
然后
更改表格并将字段设置为非空,并指定默认值0,首先,使所有当前的
null
值消失:
UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
然后,更新表定义以禁止“null”:
您必须分两步进行:
这似乎更简单,但仅适用于Oracle:
ALTER TABLE [Table]
ALTER [Column] NUMBER DEFAULT 0 NOT NULL;
此外,使用此功能,您还可以添加列,而不仅仅是修改列。
在本例中,如果该值为空,它将更新为默认值(0)。这对我很有效:
ALTER TABLE [Table]
Alter COLUMN [Column] VARCHAR(50) not null;
我也遇到了同样的问题,但该字段过去默认为null,现在我想将其默认为0。这需要在mdb的解决方案之后再添加一行:
ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
对于Oracle 11g,我可以按如下方式更改column属性:
ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
否则,阿巴切夫的回答似乎不错。您不能重复更改-它抱怨(至少在SQL Developer中)列已经不是空的。对于JDK(Oracle支持的Apache Derby发行版)中包含的内置javaDB,下面的代码对我有用
alter table [table name] alter column [column name] not null;
如果出现
外键约束
。。。如果主键表的列中不存在“0”,则会出现问题。解决这个问题的办法是
步骤1:
RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)
使用以下代码禁用所有约束:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
第二步:
RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)
第三步:
RUN UPDATE COMMAND (as mentioned in above comments)
RUN ALTER COMMAND (as mentioned in above comments)
使用以下代码启用所有约束:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
也可以在SSMS GUI中使列不为null并添加默认值
updatemytable SET myColumn=0
就我而言,我对贴出的答案有困难。我最终使用了以下方法:
ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT '';
将VARCHAR(200)
更改为您的数据类型,并可以选择更改默认值
如果没有默认值,则在进行此更改时会遇到问题,因为默认值为null会产生冲突。可以使用以下sql更改现有DB列的定义
ALTER TABLE mytable modify mycolumn datatype NOT NULL;
让我们举一个例子:
TABLE NAME=EMPLOYEE
我想把EMPLOYEE\u NAME
列改为notnull
。此查询可用于以下任务:
ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
还有一件事-您可能希望为未指定列的任何现有插入添加一个默认值:ALTER TABLE FOO add CONSTRAINT FOO\u Bar\u默认值0 FOR Barals所以您可能会惊讶地知道,将列更改为
NOT NULL
会导致大量日志记录。让我为上述两个正确的响应添加值。NULL的语义可以有几个含义。其中一个共同的含义是未知的。以分数为例。零分和零分是一个不同的世界!在你做上述建议之前。确保您的应用程序的业务逻辑中没有空值。请首先备份数据库,以防您输入错误和数据库爆炸。应始终备份数据库。你永远不知道你的人什么时候会编写、更新或删除语句,而忘记WHERE子句。我知道这个问题是针对SQLServer的,但这对Postgres 9不太管用。改为使用try:“ALTER TABLE[TABLE]ALTER COLUMN[COLUMN]SET NOT NULL”@SebastianGodelet:有一个设置允许您关闭该警告,或使其不阻止您修改该表。在某些情况下,更改表的架构需要创建一个新表,从旧表复制数据并删除旧表。由于此过程中的错误可能会导致数据丢失,SSMS会警告您,并且默认情况下会阻止您执行此操作。这并不能解决问题。默认值已设置,需要更改的是NOT NULL。只有您的答案,所有现有记录将保持为空,问题仍然存在。您是否阅读了“添加一行”部分?比如,这是在上述答案之外?事实上,不,不清楚“再添加一行”是否意味着“在上述答案之外”(特别是因为“上面”有很多答案)-如果这是你的意思,然后,措辞真的需要改变,你应该包括你提到的答案的那一行,只是想插嘴说,明确命名你的约束是个好主意,包括默认值。如果需要删除列,则必须知道要删除的约束的名称