【问题标题】:Add a column not null without default添加一个不为空的列,没有默认值
【发布时间】:2013-05-31 18:39:33
【问题描述】:

当我尝试添加此列时:

alter table APL ADD CODE NUMERIC(2) NOT NULL

我收到此错误:

ALTER TABLE 'APL' 失败。需要默认子句才能添加非 NULL 列“CODE”。

我知道我可以添加一个默认值并且它会起作用,但是我不想在这个列中使用默认值,我读到并且听说有办法可以添加没有默认值的列。
有谁知道吗?


编辑:
我会详细解释我的情况。
此列被错误地创建为 NULL(我不知道为什么),它是主键的一部分(幸运的是我没有重复),所以我必须将其更改为 NOT NULL,这样我才能分配它。
一个旧列,我不知道应该添加什么样的默认值,因为如果我添加错误的值,应用程序可能会导致问题。

【问题讨论】:

    标签: sybase sap-ase


    【解决方案1】:

    我发现这个查询适合我,对我来说似乎很好。以前有人试过吗?
    我将该列添加为 NULL ,然后将其修改为非空。


    更改表 TEST_EMPLOYEE 添加 COMP_CODE NUMERIC(4) NULL
    alter table TEST_EMPLOYEE MODIFY COMP_CODE NUMERIC(4) NOT NULL

    【讨论】:

    • 但是这种方法使得 NULL 值存在于非 NULL 列上
    • @devzer0 你是什么意思?如果我尝试在此列中插入 NULL 值,我将收到此列不允许空值的错误。
    • @moudiz 您必须考虑 COMP_CODE 列中具有空值的现有行?如果允许这样做,那么他们将违反条件。
    • @AdamH 该列应该是主键的一部分,这就是为什么我需要它作为 NOT NULL ,并且我正在使用 powerbuilder 并且在某些情况下如果该列具有 DEFAULT VALUE ,应用程序将导致问题。此列不应为空
    【解决方案2】:

    如果你认为你的要求是不可能的。

    您想指定“NOT NULL”,它告诉数据库每一行都必须有该列的值,如果您为现有行中的列提供默认值,数据库很乐意这样做。

    但是您不想提供默认值,那么数据库应该如何在现有行中使列“NOT NULL”?

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      相关资源
      最近更新 更多