在将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值。 我应该注意什么?
谢谢。
答案 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。