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

本文介绍了在达梦数据库中如何处理带有自增列的表进行数据插入,强调了需要设置IDENTITY_INSERT为ON,并详细说明了插入数据时必须指定列名的规则。同时提供了一段SQL语句,用于生成批量插入的查询语句,适用于多表操作。最后,提醒读者在执行SQL后要批量执行生成的语句。
摘要由CSDN通过智能技术生成

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

这种存在自增列表是无法直接插入数据的,需要设置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 A
INNER JOIN SYSOBJECTS B
ON
        A.ID=B.ID
WHERE
        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语句批量执行即可。

更多内容请参考达梦数据库技术社区:https://eco.dameng.com

个人博客:Jackin's Blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DB实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值