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;

你可能感兴趣的:(db2,SQL0798N,SQLSTATE=428C9,GENERATED,IDENTITY)