Fork me on GitHub

达梦数据库 -2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值

达梦数据库 -2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值


 

一、问题背景

将达梦数据表 "PRODUCTION"."PRODUCT_CATEGORY" 中 id 为1到8 范围内的8条数据误删除了,现在需要将这8条数据重新插入表中。

插入 SQL 语句如下:

insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(1, '小说');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(2, '国学');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(3, '天文');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(4, '英语');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(5, '管理');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(6, '少儿');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(7, '金融');
insert into "PRODUCTION"."PRODUCT_CATEGORY"("PRODUCT_CATEGORYID", "NAME") VALUES(8, '厨艺');

 

执行报错信息如下:

-2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值

 

在“DM管理工具”客户端中执行 SQL 语句,报错效果如下: 

 

二、问题原因

达梦数据库默认主键 ID 是自增的,不允许重复插入自增主键列(即使数据被删除了)

默认配置项 IDENTITY_INSERT 值为 OFF 

 

三、解决方案

1)修改配置项 IDENTITY_INSERT

根据报错提示:“仅当指定列列表,且SET IDENTITY_INSERTON时,才能对自增列赋值” 。

语法如下:

set IDENTITY_INSERT 表名 ON;
insert into 表名(列名,...,列名)values (值,...,值);

 

本案例中,修改配置的SQL语句如下:

SET IDENTITY_INSERT "PRODUCTION"."PRODUCT_CATEGORY" ON;

 

执行效果如下:

 

2)重新执行插入 SQL 语句

 

 执行后,效果如下:

刷新表数据,发现并没有查询到新插入的数据

 

3)必须执行 commit 提交

达梦数据库默认不提交,需要手动执行提交(commit)行为。

点击上方绿色的“提交”(对号图标)按钮,即可将执的插入语句提交到数据库。

 

提交成功后,“提交”按钮才是灰色的。

 

提交成功后,再次刷新表数据,即可查询到新插入的8条数据。

 

posted @ 2023-10-18 17:31  龙凌云端  阅读(6615)  评论(0编辑  收藏  举报