我可以添加一个非空列而不指定默认值吗?
问题的原因是,如果要向一个已有的表中添加一个非空(not null)的列,但是不想为该列设置默认值,那么该怎么办?在这种情况下,我们不能通过默认约束来解决问题,因为默认约束只能设置一个简单的常量值。如果每一行的新值取决于已有的其他列,我们无法通过默认约束来实现。
解决方法是,首先将该列添加到表中,然后更新已有的行,使它们都不为空,最后添加一个“not null”约束。这种方法比创建/删除默认值更好,特别是当新值的逻辑比一个简单的常量更复杂时。
要学习如何添加“not null”约束,请参考stackoverflow.com/a/689766/138757的回答。
问题:如何在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中添加非空列而不指定默认值的解决方法。这些方法可以确保在添加非空列时不会破坏现有数据的完整性。