日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。