2

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

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 中可以做到这一点吗?

4

5 回答 5

4

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

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

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

ALTER TABLE MYDB.RULES ALTER COLUMN TYPEID SET NOT NULL;
于 2017-11-27T14:25:07.283 回答
1
ALTER TABLE MYDB.RULES ALTER TYPEID SET NOT NULL;

是正确的。

你是如何发表声明的?

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

让我相信,无论您如何运行该语句,您都没有看到CPA32B2 - Change of file RULES may cause data to be lost. (C I)查询消息;因此它会自动得到一个C-Cancel.

于 2016-11-08T13:37:40.257 回答
0

试试这个,用列的类型

ALTER TABLE yourlib/yourtable ALTER COLUMN yourcolumn SET DATA 
TYPE VARCHAR ( 100) NOT NULL                           
于 2016-11-08T07:02:41.353 回答
0

如果你想要一个约束,你添加一个约束。首先,确保表中的所有行都满足约束,然后添加约束。

update mylib/myfile set myfield = ' ' where myfield is null;
ALTER TABLE mylib/myfile ADD CONSTRAINT myfieldisnull CHECK (myfield is not null );
于 2016-11-08T16:08:28.450 回答
0

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

CALL SYSPROC.ADMIN_CMD('REORG TABLE MYDB.RULES');
于 2018-06-11T14:45:39.120 回答