DB2 添加主键 -542, SQLSTATE=42831

1.问题
需要对表进行增加主键时,使用如下语句:

alter table TABLENAME add primary key (PK_FIELD);

发生错误:

-542, SQLSTATE=42831

解释:
-542 42831 :可以为空的列不允许作为主键的一部分包含在内
检查表结构 发现 PK_FIELD 确实是允许为空

SELECT * from SYSIBM.SYSCOLUMNS where TBNAME='TABLENAME';

在这里插入图片描述

2.解决方案

1. 将Allow null 改为 not null
执行

alter table TABLENAME ALTER PK_FIELD set not null;

网上也有如下语句,但发现在有数据的情况下无法更正 allow null为not null

alter table TABLENAME add unique(PK_FIELD);

2. 设置主键

alter table TABLENAME add primary key (PK_FIELD);

*如果在执行alert后发现出现错误
SQL0668N Operation not allowed for reason code “7” on table XXX
请重新整理下表

call sysproc.admin_cmd ('reorg table TABLENAME');

综上所述
大致过程如下:

alter table TABLENAME ALTER PK_FIELD set not null;
alter table TABLENAME add primary key (PK_FIELD);
call sysproc.admin_cmd ('reorg table TABLENAME');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值