达梦数据库常用SQL之生成启用自增列表插入功能及insert插入语句

网友投稿 681 2022-09-16

达梦数据库常用SQL之生成启用自增列表插入功能及insert插入语句

由于工作需要,需要对有自增列的表插入数据,带自增列的表有很多,计划使用查询插入的方式来实现。

这种存在自增列表是无法直接插入数据的,需要设置IDENTITY_INSERT为ON。DM要求一个会话连接中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON,当设置一个新的表IDENTITY_INSERT 属性设置为ON时,之前已经设置为ON的表会自动还原为OFF。因此每次insert into一张表之前都要先执行一次set IDENTITY_INSERT on 的语句。

此外,insert into的语句必须要指明列名,例如:

insert into a select * from b;

上面这种方式是无法成功插入数据的,正确语句如下:

insert into a ("ID","NAME","EMAIL") select * from b;

当数据库中有多张表时,则使用以下语句即可拼出所有的查询插入语句

SELECT ' SET IDENTITY_INSERT "' ||B.NAME ||'" ON; INSERT INTO "' ||B.NAME ||'"("' ||LISTAGG(A.NAME, '","') WITHIN GROUP (ORDER BY A.COLID) ||'") SELECT * FROM "' ||B.NAME ||'";'FROM SYSCOLUMNS AINNER JOIN SYSOBJECTS BON A.ID=B.IDWHERE B.NAME IN ( SELECT DISTINCT S.NAME FROM SYSOBJECTS S, SYSCOLUMNS C WHERE S.ID =C.ID AND C.INFO2 =1 AND S.NAME IN ( SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME NOT LIKE 'CTI%' ) ) AND B.SCHID= ( SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME='SYSDBA' )GROUP BY B.NAME;

以上SQL执行结束后,将查询结果集中的SQL语句批量执行即可。

更多内容请参考达梦数据库技术社区:Blog​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Rear备份操作系统(RHEL红帽+Suse+Kylin-Server麒麟)
下一篇:全媒派:多家美国大报聘请专人运营社媒帐号,这能帮助报纸“涨粉”吗?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~