最新更新請訪問: 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 :返回當前會話當前作用域任何表生成的最后一個標識值 。