我可以添加一个非空列而不指定默认值吗?

35 浏览
0 Comments

我可以添加一个非空列而不指定默认值吗?

我可以添加一个指定为NOT NULL的列吗?我不想指定默认值,但是MS-SQL 2005说:

ALTER TABLE只允许添加可以包含空值的列,或者指定了DEFAULT定义,或者要添加的列是标识列或时间戳列,或者如果不满足前面的条件,则表必须为空才能添加此列。由于不满足这些条件,列'test'无法添加到非空表'shiplist'中。

如果可以,请告诉我语法,如果不可以,请说明原因。

0
0 Comments

问题的原因是,如果要向一个已有的表中添加一个非空(not null)的列,但是不想为该列设置默认值,那么该怎么办?在这种情况下,我们不能通过默认约束来解决问题,因为默认约束只能设置一个简单的常量值。如果每一行的新值取决于已有的其他列,我们无法通过默认约束来实现。

解决方法是,首先将该列添加到表中,然后更新已有的行,使它们都不为空,最后添加一个“not null”约束。这种方法比创建/删除默认值更好,特别是当新值的逻辑比一个简单的常量更复杂时。

要学习如何添加“not null”约束,请参考stackoverflow.com/a/689766/138757的回答。

0
0 Comments

问题:如何在SQL Server中添加一个非空列而不指定默认值?

在SQL Server中,如果要添加一个非空列而不指定默认值,是不被允许的,因为SQL Server无法确定现有行应该具有什么值。然而,可以通过以下方法解决这个问题:

1. 使用默认值:可以在添加非空列的同时指定默认值,然后立即将默认值删除。

ALTER TABLE table_name
ADD column_name data_type DEFAULT default_value NOT NULL
ALTER TABLE table_name
DROP CONSTRAINT constraint_name

2. 使用WITH VALUES选项:如果已经添加了非空列但没有指定默认值,可以使用WITH VALUES选项来为现有行提供默认值。

ALTER TABLE table_name
ADD column_name data_type NOT NULL
UPDATE table_name
SET column_name = default_value

以上是在SQL Server中添加非空列而不指定默认值的解决方法。这些方法可以确保在添加非空列时不会破坏现有数据的完整性。

0
0 Comments

不可以。因为如果允许这样操作,SQL就无法确定在已存在的记录中应该放入什么值。如果表中没有任何记录,这样操作是没有问题的。

最简单的方法是先创建带有默认值的列,然后再移除默认值。

ALTER TABLE dbo.MyTable ADD
MyColumn text NOT NULL CONSTRAINT DF_MyTable_MyColumn DEFAULT 'defaultValue'
ALTER TABLE dbo.MyTable
DROP CONSTRAINT DF_MyTable_MyColumn

另一种方法是先添加不带约束的列,填充所有单元格的值,然后再添加约束。

0