【问题标题】:Cannot insert a new column in a table无法在表中插入新列
【发布时间】:2012-12-11 16:15:46
【问题描述】:

我有一个Product 表,我想在其中创建一个新列Modified_ByModified_Date_Time。这些列不允许空值。

但是,由于数据库已经有数据,为了创建这个列,我必须定义为“允许空值”。然后,我运行一个更新新列的进程。最后一步是取消选中“允许空值”属性,但是当我尝试保存表更改时,出现以下错误:

“Product_Details”表 - 无法修改表格。
无法将值 NULL 插入到列“Modified_Date_Time”、表“Vendor Products.dbo.Tmp_Product_Details”中;列不允许空值。插入失败。 声明已终止。

所有行都已成功更新为“Modified_By”和“Modified_Date_Time”列中的正确值,所以我不知道为什么会出现此错误...无论如何,它似乎是一个新的“临时”表由 SQL Server 2008 创建,因为我没有任何名为“Tmp_Orders”的表

【问题讨论】:

    标签: sql database sql-server-2008


    【解决方案1】:
    ALTER TABLE {TABLENAME} 
        ADD {COLUMNNAME} {TYPE} {NOT NULL} 
        CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
    

    你必须设置一个默认值。

    ALTER TABLE Product ADD Modified_By datetime DEFAULT (GETDATE())
    

    默认值将设置为今天。

    【讨论】:

    • 你没有来设置默认值;允许 NULL,更新数据以使没有任何数据,然后禁止 NULL 应该可以工作。
    • 是的,我同意,但只使用一个命令会更简单。你做事的方式总是不止一种。
    • 当然,如果您想要列上的默认值;没有迹象表明他们这样做,并且说他们必须设置默认值是完全错误的。
    • 他说“此列不允许空值。”。如果要添加不允许 null 的列,则有两种方法:使用默认值创建列,或者创建接受 null 的列,填充列并更改列属性。
    • 嗨,我已经尝试过这个查询,结果看起来像“Modified_By”列,其中包含“-1”作为数据。请指教............Alter Table Product_Details Add Modified_By varchar (50) NOT NULL default -1
    【解决方案2】:

    我发现交互设计不太擅长这种事情。最好手动添加约束

     ALTER TABLE Table_Name ALTER COLUMN Column_Name DataType NOT NULL
    

    例如

     ALTER TABLE MyTable ALTER COLUMN A_Column Int NOT NULL;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多