關於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...