首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 中擷取插入行的識別值?

如何在 SQL Server 中擷取插入行的識別值?

Patricia Arquette
發布: 2025-01-23 09:12:11
原創
756 人瀏覽過

How to Retrieve the Identity Value of an Inserted Row in SQL Server?

取得 SQL Server 中新新增的行的 ID

為具有自動遞增列的資料表新增一行通常需要檢索新產生的 ID。 SQL Server 提供了多種方法來實現此目的,每種方法都有自己的優點和缺點。 了解這些差異是選擇適合您情況的最佳方法的關鍵。

不同的方法及其細微差別

@@IDENTITY 函數

@@IDENTITY 函數傳回目前資料庫工作階段中所有資料表中最近產生的識別值。 這很方便,但如果在同一會話中發生多次插入,則可能不可靠,可能會導致不正確的結果。

SCOPE_IDENTITY() 函數

SCOPE_IDENTITY() 更精確。它會傳回目前會話和範圍(例如,在預存程序或批次)內產生的最後一個識別值。這使得它通常成為最安全和最推薦的選擇。

IDENT_CURRENT('tableName') 函數

IDENT_CURRENT('tableName') 直接針對特定表。它會檢索為該表產生的最後一個標識值,無論會話或範圍如何。 這對於檢查分配給表的最後一個 ID 很有幫助,即使最近沒有插入。

將 OUTPUT 子句與 INSERT 一起使用

INSERT 語句與 OUTPUT 子句結合使用時,提供了強大、直接的方法。 它允許您捕獲語句插入的所有行,包括標識值。 這種方法的範圍僅限於聲明本身,避免了潛在的歧義。 請注意,這通常涉及插入臨時表或表變量,這會增加一點複雜性。

何時使用哪一種方法

  • 對於大多數場景,SCOPE_IDENTITY()是取得新產生的身份值的首選方法。 其範圍特定的性質確保了準確性。
  • 僅當您需要所有範圍內的最後一個識別值並且意識到可能出現錯誤時才使用 @@IDENTITY
  • IDENT_CURRENT('tableName') 對於檢索特定表的最後一個標識值非常有用,無論會話或範圍如何。
  • INSERT ... OUTPUT 方法提供了效率和範圍控制,但需要額外的設定。 考慮一下它相對於增加的複雜性的好處。

以上是如何在 SQL Server 中擷取插入行的識別值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板