将不可为空的列添加到SQL Server中的现有表中?

时间:2010-02-15 19:52:24

标签: sql sql-server database

我已经有一个由数据组成的表。我需要更改表以添加两个非空的新列。如何在不丢失任何现有数据的情况下实现这一目标?


这是我尝试的(通过右键单击表格并选择设计):

  1. 添加新列'EmpFlag'(位,null),'CreatedDate'(日期时间, 空)

  2. 更新了表中的'EmpFlag'列,以获得一些有效值。 (只是想在一个领域工作,所以我没有更新'CreatedDate'字段)

  3. 现在右键单击表,设计,并使其不为空。

  4. 当我尝试保存时,出现此错误消息:

      

    不允许保存更改。 您所做的更改需要   要删除并重新创建以下表格

3 个答案:

答案 0 :(得分:68)

您只需在新列中设置默认值,即可添加它们。

alter table table_name
    add column_name datetime not null
       constraint DF_Default_Object_Name default (getdate())

或这个用于varchar字段。

alter table table_name
    add column_name varchar(10) not null
       constraint DF_Default_Object_Name default ('A')

如果在添加列后不需要,也可以删除默认值。

alter table table_name
    drop constraint DF_Default_Object_Name

答案 1 :(得分:24)

如果您不想在列上放置默认值,您可以:

  1. 将新列创建为NULLable
  2. 适当更新现有数据
  3. 添加NOT NULL约束

答案 2 :(得分:1)

使用默认值添加新的NOT NULL列可以在GUI中完成,如下所示。将现有内容更改为NOT NULL似乎是另一回事。我得到了你的相同信息。一种选择是创建一个新的NOT NULL列,使用默认值替换旧列,然后将旧列数据复制到新列数据。

  1. 将表放入设计视图(右键单击表格 - >选择设计
  2. 添加列,选择数据类型
  3. 取消选中允许空值并设置默认值或绑定 =您的默认值,如下所示
  4. enter image description here