如何在DB2 iSeries的现有列中添加非空约束?

时间:2016-11-08 06:34:47

标签: sql db2 db2-400 iseries-navigator

我已尝试使用以下脚本向我的列添加非空约束。

ALTER TABLE MYDB.RULES ALTER TYPEID SET NOT NULL;
ALTER TABLE MYDB.RULES ALTER COLUMN TYPEID SET NOT NULL;

执行时我也遇到了这个错误:

 Reason code 10. [SQL State=57014, DB Errorcode=-952] 

是否可以在DB2 iSeries中执行此操作?

5 个答案:

答案 0 :(得分:2)

首先,您必须识别并处理目标表的NULL值(更新,删除等)

SELECT COUNT(1) FROM MYDB.RULES WHERE TYPEID IS NULL;

您可以在目标表上创建约束。

ALTER TABLE MYDB.RULES ALTER COLUMN TYPEID SET NOT NULL;

答案 1 :(得分:1)

可能是您之前更改了表并且没有运行Reorg命令。运行这个:

CALL SYSPROC.ADMIN_CMD('REORG TABLE MYDB.RULES');

答案 2 :(得分:0)

尝试使用列类型

ALTER TABLE yourlib/yourtable ALTER COLUMN yourcolumn SET DATA 
TYPE VARCHAR ( 100) NOT NULL                           

答案 3 :(得分:0)

ALTER TABLE MYDB.RULES ALTER TYPEID SET NOT NULL;

是对的。

你是如何发表声明的?

您报告的错误代码,SQL状态= 57014 - Processing was canceled as requested.

让我相信,无论你是在运行声明,都没有看到CPA32B2 - Change of file RULES may cause data to be lost. (C I)查询消息;因此它会被C-Cancel自动回答。

答案 4 :(得分:0)

如果需要约束,可以添加约束。首先,确保表中的所有行都满足约束,然后添加约束。

update mylib/myfile set myfield = ' ' where myfield is null;
ALTER TABLE mylib/myfile ADD CONSTRAINT myfieldisnull CHECK (myfield is not null );