@@IDENTITY、SCOPE_IDENTITY()和IDENT_CURRENT()的辨析

kitesky發表於2005-03-30

相同點:

它們都返回插入到IDENTITY列中的值

不同點:

A.      @@IDENTITY不受作用域(儲存過程、觸發器、函式或批處理)的限制。返回最後一個插入的IDENTITY值。如果在程式中不同的作用域插入的表不同,那麼返回最後一個表插入的IDENTITY值。例如:作用域A(儲存過程)在表T1上插入IDENTITY列,而T1上的觸發器會在T2上插入IDENTITY列。則用@@IDENTITY返回T2上插入的IDENTITY值。

B.      SCOPE_IDENTITY()受作用域的限制,只返回當前作用域中的最後一個IDENTITY值。上例中,如果在儲存過程中使用SCOPE_IDENTITY(),則返回T1的IDENTITY值。

C.      IDENT_CURRENT()不受作用域的限制,呼叫它時必須提供表示表名的字元型引數,你可以得到你想要的任何表的最後一個IDENTITY值,即使你的程式碼裡沒有插入動作。例如:IDENT_CURRENT('T1');

經驗:根據不同的使用場合,選擇不同的函式。如果在寫儲存過程時,向表中新增了一條資料,需要返回該IDENTITY值,則使用SCOPE_IDENTITY(),因為它和當前會話相關聯,不會返回一個你不需要的值。如果你僅僅想得到某個IDENTITY列的最後一個值,則使用IDENT_CURRENT()最方便。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-794401/,如需轉載,請註明出處,否則將追究法律責任。

相關文章