SQL Server 提供了多種方法來取得新插入行的識別。 每種方法都有其優點和缺點,因此選擇取決於您的特定需求。本指南闡明了 @@IDENTITY
、IDENT_CURRENT
、SCOPE_IDENTITY
和 OUTPUT
子句之間的差異。
比較 @@IDENTITY
、IDENT_CURRENT
和 SCOPE_IDENTITY
@@IDENTITY
: 此函數傳回在 目前會話 中產生的最後一個識別值,無論表格為何。 對於從會話中的任何表檢索 ID 很有用,但要小心:它可能會受到觸發器或並發操作的影響。
IDENT_CURRENT
: 檢索為 特定表 產生的最後一個識別值,無論會話或範圍如何。 當您需要特定表的 ID 時,即使您沒有直接插入行,也是理想的選擇。
SCOPE_IDENTITY
: 傳回在目前會話和範圍內產生的最後一個身分值。 通常,這是檢索最近插入的行的 ID 的最佳選擇,因為它與同一語句中的其他並發進程隔離。
OUTPUT
子句:一個強大的替代方案
OUTPUT
子句提供了一種從 INSERT
語句存取插入行的直接方法。 您可以將標識值與其他列資料一起擷取到表變數或臨時表中。 雖然簡單,但使用起來稍微複雜一些,即使語句回滾也會傳回資料。 至關重要的是,它在 觸發器之前執行,因此它不會檢索觸發器產生的識別值。但是,它提供了在使用並行處理時獲取身分值的唯一可靠方法,無論執行計劃如何,都保證其可用性。
以上是我應該使用哪種 SQL Server 識別值擷取方法(@@IDENTITY、IDENT_CURRENT、SCOPE_IDENTITY、OUTPUT 子句)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!