DB2 SQL将NULL插入具有默认值的NOT NULL中

时间:2019-12-24 14:38:07

标签: sql db2 default-value notnull

在将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值代替?

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

谢谢。

1 个答案:

答案 0 :(得分:3)

如果此列的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