一般问题处理记录--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;

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

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

原文地址:https://www.cnblogs.com/skyheaving/p/12639913.html