• 一般问题处理记录--Sql处理 (返回自增主键ID 更新)


      一、Sql Server

        (一)、保留几位小数的两种做法

          数据库里的 float momey 类型,都会精确到多位小数。但有时候 我们不需要那么精确,例如,只精确到两位有效数字。

        解决:

          1. 使用 Round() 函数,如 Round(@num,2)  参数 2 表示 保留两位有效数字。

          2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,decimal(18,2) 指定要保留的有效数字。

          这两个方法有一点不同:使用 Round() 函数,如果 @num 是常数,如 Round(2.3344,2) 则 会在把有效数字后面的 变为0 ,成 2.3300。但 Convert() 函数就不会。

          原文链接:https://blog.csdn.net/skyandcode/java/article/details/23523815    

        (二)、返回自增列ID

          SQLServer 返回Insert 操作 自增列ID的方法 有两种:1、 @@identity  2、output inserted.ID (个人使用这种,可以返回添加的列名)     ------  使用  ExecuteScalar 方式获取。

    --- 使用 @@identity
    
    Insert into userinfo (username,age,mark) values('','','');select @@identity;
    
    
    --- 使用 output inserted.ID
    Insert into userinfo (username,age,mark)  output inserted.id values('','','');

      二、达梦SQL (Oracle )    

        (一)、insert 返回当前自增主键ID

          进行数据Insert操作时,我们一般需要获取新插入数据的ID,返回操作数据主键ID(int 类型的自增主键ID),达梦数据插入如何返回自增列呢?

          达梦SQL 语法与Oracal 语法相似,对于初次接触达梦数据库的人来说,如果熟悉Oracle ,那么一定会事半功倍。

          1、Oracle 中返回新增数据主键ID的方法是使用 序列 sequence ,结合 序列sequence 固有属性nextval(下一个值)和currval(当前值)进行返回操 作。       

    create SEQUENCE SEQ_UserInfo -- 创建 userinfo 表的序列 (一般命名:SEQ_表名)
    minvalue 1   -- 最小值
    maxvalue 99999999999999  -- 最大值(可不设置) 建议主键类型 bigint (long)
    start with 1   -- 起始值
    increment by 1  -- 增量
    cache 20  -- 缓存 (达梦:高速缓存)
    ORDER;   -- 排序方式:顺序 ORDER /循环 CYCLE

    ----------------------------------------------------------------
    ------ALTER SEQUENCE SEQ_UserInfo INCREMENT BY 2 CYCLE NOORDER;
    ------修改sequence 自增 增量为2 循环无顺序处理。
    ----------------------------------------------------------------        

          2、使用时,在新增sql 中使用 nextval 替代 自增主键值,然后再使用 currval 进行新增数据返回值获取。

    insert into userinfo(id,username,age,mark) values(SEQ_UserInfo.nextval,'name1'18'测试添加') ;
    select SEQ_UserInfo.currval from dual;

          3、如果执行添加语句失败:提示 仅当指定列列表,且 SET IDENTITY_INSERT 为ON 时,才能对自增列赋值       

    SET IDENTITY_INSERT userinfo ON;
    insert into userinfo(id,username,age,mark) values(SEQ_UserInfo.nextval,'name1'18'测试添加') ;
    SET IDENTITY_INSERT userinfo OFF;
    select SEQ_UserInfo.currval from dual;

       如有不合理之处,欢迎指出。欢迎转载,转载请注明出处。

       如果您觉得本文对您有帮助,欢迎点击“收藏”按钮!(/:微笑)

  • 相关阅读:
    HCIA_R&S-学习_Day05(PPPoE、DHCP、ACL、NAT)
    HCIA_R&S-学习_Day04(链路状态协议OSPF & PPP)
    HCIA_R&S-学习_Day03(路由协议基础与实现)
    【详谈 Delta Lake 】系列技术专题 之 湖仓一体( Lakehouse )
    工作7年,我的10条经验总结
    Hologres揭秘:优化COPY,批量导入性能提升5倍+
    谈谈JVM内部锁升级过程
    如何帮用户管好云账本?阿里云数据库助力收钱吧 | 甲子光年
    重磅 | 数据库自治服务DAS论文入选全球顶会SIGMOD,领航“数据库自动驾驶”新时代
    同程旅行基于 RocketMQ 高可用架构实践
  • 原文地址:https://www.cnblogs.com/skyheaving/p/12639913.html
Copyright © 2020-2023  润新知