SQL0798N 不能为定义为 GENERATED ALWAYS 的列 “ID“ 指定值。 SQLSTATE=428C9

问题描述

db2 表中有一列为自增主键,创建方式为:GENERATED ALWAYS AS IDENTITY
现在需要将该表的数据同构传输到备份库。

使用插入更新方式写入时,提示错误:
SQL0798N 不能为定义为 GENERATED ALWAYS 的列 “ID” 指定值。 SQLSTATE=428C9

解决办法:

  • 1、重新创建目标表,ID列不加自增命令;
  • 2、将数据导入到目标表;
  • 3、手工添加自增命令,指定ID起始值为原表的最大值加1

测试过程如下

-- 原表结构
CREATE TABLE t
	(
	ID                INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
	name         VARCHAR (32) NOT NULL
,PRIMARY KEY(ID)
)
;

-- 目标表结构
CREATE TABLE t
	(
	ID                INTEGER NOT NULL ,
	name         VARCHAR (32) NOT NULL
,PRIMARY KEY(ID)
)
;

-- 写入数据
INSERT INTO t(id,name) VALUES(1,'a');

-- 手工添加自增命令,指定ID起始值为原表的最大值加1
ALTER TABLE t ALTER COLUMN id SET GENERATED ALWAYS AS IDENTITY(START WITH 2);

-- 测试数据写入
INSERT INTO t(name) VALUES('a2');
SELECT * FROM t;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值