日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

@@IDENTITY 的缺点 SCOPE_IDENTITY() 取而代之

發布時間:2025/3/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @@IDENTITY 的缺点 SCOPE_IDENTITY() 取而代之 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
也許大家對SQL Server中的 @@IDENTITY 都不陌生,都知道它是獲取數據表中最后一條插入數據的IDENTITY值。
?比如,表 A 中有個 ID 為自增1的字段,假設此時 ID 的值為100,現在如果我往表A插入一條數據,并在插入后
?SELECT @@IDENTITY,則其返回 101,最后一條IDENTITY域(即ID域)的值。
?
?現在問題來了,為什么說要慎用@@IDENTITY呢?原因是 @@IDENTITY 它總是獲取最后一條變更數據的自增字段的值,
?而忽略了進行變更操作所在的范圍約束。比如,我有表 A 和表 B 兩個表,現在我在表 A 上定義了一個Insert觸發器,
?當在表 A 中插入一條數據時,自動在表 B 也插入一條數據。此時,大家注意,有兩個原子操作:在A中插入一條數據,?接著在B中隨后插入一條數據。
?
?現在我們想下,假設上面表 A 和表 B 都有IDENTITY自增域,那么我們在表 A 插入一條數據后,使用了
?SELECT @@IDENTITY 輸出時,輸出的到底是 A 還是 B 的自增域的值呢?? 答案很明顯,是誰最后插入就輸出誰,
?那么就是 B 了。于是,我本意是想得到 A 的自增域值,結果得到了 B 的自增域值,一只 BUG 隨之誕生,搞不好還
?會影響到整個系統數據的混亂。
?
?因此,對于這種情況,建議大家慎用 @@IDENTITY,而盡量采用 SCOPE_IDENTITY() 函數替換之。SCOPE_IDENTITY()
?也是得到最后一條自增域的值,但是它是僅限在一個操作范圍之內,而不像 @@IDENTITY 是取全局操作的最后一步操作
?所產生的自增域的值的。

總結

以上是生活随笔為你收集整理的@@IDENTITY 的缺点 SCOPE_IDENTITY() 取而代之的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。