關於SQL三種獲取自增長的ID方法

2021-04-26 13:07:19 字數 1197 閱讀 3091

關於sql三種獲取自增長的id方法

sql server中的三種獲得自增長id的方法

這個功能比較常用,所以記下來以防自己忘掉。

scope_identity

返回插入到同一作用域中的 identity 列內的最後乙個 identity 值。乙個作用域就是乙個模組——儲存過程、觸發器、函式或批處理。因此,如果兩個語句處於同乙個儲存過程、函式或批處理中,則它們位於相同的作用域中。

ident_current

返回為任何會話和任何作用域中的指定表最後生成的標識值。這個函式需要乙個以表名為值的變數,也就是說雖然不受會話和作用域的限制,卻會受到表的限制。

@@identity

返回最後插入的標識值。

體會:加上事物處理,兩個函式乙個變數沒有本質區別。不加事物處理兩個函式乙個變數受到其他會話、作用域的影響不一樣。

一直以來都是使用@@identity來獲得最後乙個插入到表的記錄的identity值,最近發現這種方法在某種情況是不可靠的,先來看看兩個概念

作用域:在sqlserver作用域就是乙個模組-儲存過程,觸發器,函式或批處理

會話:  乙個使用者連線產生的所有上下文資訊(online book找不到會話的概念,參照會話上下文概念而寫)

相同點:都是返回最後插入的標識值

不同點:

@@identity :返回當前會話最後乙個標識值,不限於特定的作用域 ;

ident_current('tablename'):返回任何會話,任何作用域中的指定表中生成的最後乙個標識值 ;

scope_identity :返回當前會話當前作用域任何表生成的最後乙個標識值 。

摘自:http://www.ehrdoor.cn/club/?uid-96-action-viewspace-itemid-3139

sql0="select @@identity as id"

rs.addnew

rs("u_user")=f_user

rs("u_psw")=f_pwd

rs.update

rs.close

rs.open sql0,conn,1,1

identity=rs("id")

當在rs.close後加入set rs=nothing就不能獲得@@identity的值。

sql 獲取新插入的id值的三種方法

最近在公司做demo時,遇到了sql server,獲取表資料的剛剛插入的id值,經過查詢sql提供了三種方法對最後插入的id進行查詢 identity ident current tablename scope identity 注 使用時,可以as 可以在下方rs.getstring shi使用...

MYSQL獲取自增ID的四種方法

原文 last insert id 是與table無關的,如果向表a插入資料後,再向表b插入資料,last insert id會改變。在多使用者交替插入資料的情況下max id 顯然不能用。這時就該使用last insert id了,因為last insert id是基於connection的,只要...

JDBC獲取新插入記錄id的三種方法

在一對多的關聯操作中,通常在一方插入記錄後,需要獲取到當前記錄的id,以方便進行多方的插入操作。要解決這一問題,在jdbc中至少有三種不同的實現方法 1.在插入語句後新增一條查詢,利用resultset來得到id號 psmt con.preparestatement insert into orde...