IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表

IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表

IDENT_CURRENT、SCOPE_IDENTITY 和 @@IDENTITY 是類似的系統函數,都會傳回最後插入的識別值,但是各函數定義的範圍 (Scope)工作階段 (Session) 各不同,以下摘自 SQL Server 2005 線上叢書的說明:
  • IDENT_CURRENT 會傳回在任何工作階段和任何範圍中,產生給特定資料表 (叫用函數時指定) 的最後一個識別值。
  • SCOPE_IDENTITY 會傳回在目前工作階段以及目前範圍中,任何資料表產生的最後一個識別值。
  • @@IDENTITY 會傳回所有範圍的目前工作階段中,任何資料表所產生的最後一個識別值。
整理成對照表來看應該會比較清楚,順便以後回頭查找的時候可以快速回憶:

函數 工作階段 (Session) 範圍 (Scope) 資料表 (table) 傳回 NULL 的情況
IDENT_CURRENT any any specific
  • 發生錯誤,或呼叫者沒有檢視物件的權限。
  • 在空白資料表或沒有識別資料行的資料表上叫用。
SCOPE_IDENTITY current current any
  • 在範圍內的識別資料行執行任何 INSERT 陳述式之前叫用。
@@IDENTITY current all any
  • 執行的陳述式並未影響任何含有識別資料行的資料表。

上面的速查表,條列出這三個系統函數的不同之處,至於更詳細的說明及範例,線上叢書裡寫得很完整,就請大家自行查閱。
參考資料: