一般問題處理記錄--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;

 

 

 

 

   如有不合理之處,歡迎指出。歡迎轉載,轉載請注明出處。

   如果您覺得本文對您有幫助,歡迎點擊“收藏”按鈕!(/:微笑)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM