问题描述
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;