[轉]SQL三種獲取自增長的ID方法


 最新更新請訪問: http://denghejun.github.io

 

SQL SERVER中的三種獲得自增長ID的方法  這個功能比較常用,所以記下來以防自己忘掉。 

SCOPE_IDENTITY 

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

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

@@IDENTITY 

返回最后插入的標識值。 

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

 

也可以用觸發去獲取.
create trigger my_trig on Article for insert
as
  select ArticleID from inserted
go

 

一直以來都是使用@@identity來獲得最后一個插入到表的記錄的identity值,最近發現這種方法在某種情況是不可靠的,先來看看兩個概念  作用域:在SQLSERVER作用域就是一個模塊-存儲過程,觸發器,函數或批處理  會話:  一個用戶連接產生的所有上下文信息(online book找不到會話的概念,參照會話上下文概念而寫) 

相同點:都是返回最后插入的標識值  不同點:  @@identity :返回當前會話最后一個標識值,不限於特定的作用域 ;  ident_current('tablename'):返回任何會話,任何作用域中的指定表中生成的最后一個標識值 ;  scope_identity :返回當前會話當前作用域任何表生成的最后一個標識值 。


免責聲明!

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



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