在现有表中插入一个非空列。

8 浏览
0 Comments

在现有表中插入一个非空列。

我尝试了以下操作:\n

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

\n但是出现以下错误信息:\n

\nALTER TABLE 只允许添加可以包含空值或具有指定的默认定义的列\n

0
0 Comments

在现有表中插入一个NOT NULL列的问题可能出现的原因是需要在表中添加一个新列,并且要求该列的值不能为空。下面是解决此问题的方法。

一种更快的解决方案是使用以下代码在表中插入一个NOT NULL列,并且不需要设置默认值(即使对于大型表也几乎是瞬时完成的):

ALTER TABLE 表名 ADD 列名 INT NOT NULL CONSTRAINT 表名_默认约束名 DEFAULT 0
GO
ALTER TABLE 表名 DROP CONSTRAINT 表名_默认约束名
GO

这是适用于SQL Server的解决方案。感谢提供这个解决方法。

0
0 Comments

在给现有表添加一个非空列时,需提供默认值以填充现有的行。可以通过以下SQL语句来实现:

ALTER TABLE dbo.YourTbl ADD
    newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0

从2012年开始,在企业版中,这只是一个元数据的修改。

还有一种解决方法是先将列添加为可空列,然后使用更新语句更新表中的每一行,最后将列修改为非空列。这样做的好处是避免了使用默认约束,因为默认约束可能不是我们想要的。

但是这种方法可能会比较慢,特别是当使用默认值的方式作为元数据修改时(即在企业版或Azure SQL数据库中使用运行时常量值的默认值)。首先,更新语句需要更新所有行,然后将列修改为非空列,这可能会导致大量的日志文件增长。

实际上,如果要运行"ALTER TABLE ADD column NOT NULL"语句并且表中存在行,则需要提供一个默认值。虽然这个默认值只是临时的,但在运行此语句时是必需的。

总结起来,给现有表添加一个非空列时,需要提供默认值以填充现有的行。另一种解决方法是先将列添加为可空列,然后使用更新语句更新每一行,最后将列修改为非空列。但是使用默认值的方式可能更加高效。

0
0 Comments
0