达梦数据库 -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_INSERT为ON时,才能对自增列赋值” 。
语法如下:
set IDENTITY_INSERT 表名 ON;
insert into 表名(列名,...,列名)values (值,...,值);
本案例中,修改配置的SQL语句如下:
SET IDENTITY_INSERT "PRODUCTION"."PRODUCT_CATEGORY" ON;
执行效果如下:
2)重新执行插入 SQL 语句
执行后,效果如下:
(刷新表数据,发现并没有查询到新插入的数据)
3)必须执行 commit 提交
达梦数据库默认不提交,需要手动执行提交(commit)行为。
点击上方绿色的“提交”(对号图标)按钮,即可将执的插入语句提交到数据库。
提交成功后,“提交”按钮才是灰色的。
提交成功后,再次刷新表数据,即可查询到新插入的8条数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)