【问题标题】:DB2 SQL Insert NULL into NOT NULL WITH DEFAULTDB2 SQL 将 NULL 插入 NOT NULL WITH DEFAULT
【发布时间】:2020-04-15 15:01:57
【问题描述】:

在将 NULL 值插入定义为 NOT NULL WITH DEFAULT 值的列时遇到问题。 在此示例中,出于说明目的,我删除了大部分列。

CREATE TABLE
    FKTIM04
    (
        OBJECTID CHARACTER(32) NOT NULL,
        UP_CHANGE_CL CHARACTER(1) DEFAULT '1' NOT NULL,
        UP_CTRL_CL CHARACTER(1) DEFAULT '0' NOT NULL,
        CONSTRAINT PK_FKTIM04 PRIMARY KEY (OBJECTID)
    );

当我执行这条SQL语句时,出现错误:

INSERT INTO KTI.FKTIM04 (
    UP_Change_CL
    ,UP_ctrl_CL
    ,ObjectID
    )
VALUES (
    NULL
    ,NULL
    ,'UMSTM0LW8A8Z50DT4WA7U93EEQDRXRTH'
    )

错误:

[代码:-407,SQL 状态:23502] 将 NULL 值分配给 NOT 不允许使用 NULL 列“TBSPACEID=2,TABLEID=1298,COLNO=46”。 SQLCODE=-407, SQLSTATE=23502, DRIVER=4.22.29

我知道该列被定义为 NOT NULL。如果它试图在列中插入一个 NULL,它不应该取 DEFAULT 值吗?

请教我如何获取要插入的默认值。 我应该注意什么?

谢谢。

【问题讨论】:

    标签: sql db2 default-value notnull


    【解决方案1】:

    如果在INSERT 语句中未为该列提供值,则该列将使用默认值。
    因此,请不要在列表中包含您想要获取其默认值的列,如下所示:

    INSERT INTO KTI.FKTIM04 (
        ObjectID
        )
    VALUES (
       'UMSTM0LW8A8Z50DT4WA7U93EEQDRXRTH'
        )
    

    这样,行将被插入,而 2 列(因为它们未在列表中指定)将获得它们的默认值。
    请参阅demo
    另一种实现相同目的的方法是使用 DEFAULT 关键字:

    INSERT INTO FKTIM04 (
        UP_Change_CL
        ,UP_ctrl_CL
        ,ObjectID
        )
    VALUES (
        DEFAULT
        ,DEFAULT
        ,'UMSTM0LW8A8Z50DT4WA7U93EEQDRXRTH'
        )
    

    请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2012-12-30
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      相关资源
      最近更新 更多