如何在DB2 iSeries的现有列中添加非空约束?
问题描述:
我已经尝试了以下脚本来为我的列添加非空约束。如何在DB2 iSeries的现有列中添加非空约束?
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的?
答
试试这个,有类型的列
ALTER TABLE yourlib/yourtable ALTER COLUMN yourcolumn SET DATA
TYPE VARCHAR (100) NOT NULL
答
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
回答。
答
如果您想要约束,请添加一个约束。首先确保表中的所有行满足约束,然后添加约束。
update mylib/myfile set myfield = ' ' where myfield is null;
ALTER TABLE mylib/myfile ADD CONSTRAINT myfieldisnull CHECK (myfield is not null);
答
首先,你必须识别和处理目标表的NULL值(更新,删除等)
SELECT COUNT(1) FROM MYDB.RULES WHERE TYPEID IS NULL;
比你可以创建在目标表上的约束。
ALTER TABLE MYDB.RULES ALTER COLUMN TYPEID SET NOT NULL;