SQL Server 身分管理:選擇正確的函數(@@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT()、OUTPUT)
許多資料庫應用程式需要存取新插入行的 ID,特別是在處理包含識別列的表時。 SQL Server 提供了多種方法來實現這一點;每種方法都有特定的用途和潛在的缺點。
@@IDENTITY:會話範圍的身份擷取
@@IDENTITY
檢索目前會話中產生的最後一個標識值,無論表或範圍如何。 建議注意:@@IDENTITY
可以從其他範圍(例如觸發器)傳回值,可能導致結果不準確。
SCOPE_IDENTITY():特定範圍的身份擷取
SCOPE_IDENTITY()
提供了更精確的方法,傳回目前會話和範圍(通常是目前資料庫)內產生的最後一個識別值。 其可靠性使其成為大多數場景的首選方法。 可以使用 (n)
語法進一步細化範圍。
IDENT_CURRENT():表格特定身分擷取
IDENT_CURRENT('tableName')
檢索為指定表產生的最後一個標識值,無論會話或範圍如何。當從目前會話中未修改的表格存取標識值或 @@IDENTITY
和 SCOPE_IDENTITY()
不合適時,這非常有用。
OUTPUT 子句:語句層級身分檢索
OUTPUT
語句中的 INSERT
子句提供了一種直接方法來存取語句範圍內插入行的 ID。 與 @@IDENTITY
不同,它避免了跨範圍問題。 但是,它需要使用表變數或臨時表來儲存輸出,這可能會增加複雜性並影響效能。 重要的是,它是在並行執行中檢索身分的唯一有保證的方法。
選擇正確的身份檢索方法取決於特定的應用需求。雖然通常建議使用 SCOPE_IDENTITY()
,但 @@IDENTITY
、IDENT_CURRENT()
和 OUTPUT
子句在特定上下文中提供了有價值的替代方案。
以上是如何選擇正確的 SQL Server 身分擷取函數:@@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT() 或 OUTPUT?的詳細內容。更多資訊請關注PHP中文網其他相關文章!