一般问题处理记录--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;
如有不合理之处,欢迎指出。欢迎转载,转载请注明出处。
如果您觉得本文对您有帮助,欢迎点击“收藏”按钮!(/:微笑)