zoukankan      html  css  js  c++  java
  • 一般问题处理记录--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;

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

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

  • 相关阅读:
    leetcode bugfree note
    leetcode 419
    leetcode 165
    leetcode 155
    leetcode 204
    leetcode 28
    将二叉搜索树转为有序双向链表
    leetcode 397
    ABAP 动态内表创建/赋值
    ABAP 屏幕下拉框值根据选择框填值赋值
  • 原文地址:https://www.cnblogs.com/skyheaving/p/12639913.html
Copyright © 2011-2022 走看看