2010-11-11 40 views
4

我將數據插入到表像這樣:如何獲得插入結果的標識字段?

Insert Into MyTable (Field1, Field2) 
      Values ('test', 5) 

當這種插入發生時,新的行會必須在ID列的標識值。如果在我的T-SQL代碼中有一個名爲@ID的變量,如何用T-SQL插入的結果填充@ID

Declare @ID int 

Insert into MyTable (Field1, Field2) 
      Values ('test', 5) 

--//How do I populate @ID with the value of ID of the record that was just inserted? 

回答

18

有兩種方式 - 一是使用SCOPE_IDENTITY

DECLARE @ID INT 

INSERT INTO MyTable (Field1, Field2) 
VALUES ('test', 5) 

SELECT @ID = SCOPE_IDENTITY() 

不要使用@@ IDENTITY - 它包含的值是最後更新IDENTITY列,而不爲考慮範圍。意思是,它不可靠,它保存了您的 INSERT的值,但是SCOPE_IDENTITY的值爲

另一種選擇是使用OUTPUT clause(SQL Server 2005+)。

+0

哦。我很高興我讀到這個。感謝有關'@@ Identity'和'Scope_Identity()' – 2010-11-11 17:23:55

2
SELECT @ID = SCOPE_IDENTITY(); 
0

你應該在你的情況下使用scope_identity。

有不同的方式來獲得最後插入的身份和他們不同,他們是如何工作的,供大家參考列出他們 -

  1. @@IDENTITY

  2. SCOPE_IDENTITY()

  3. IDENT_CURRENT

  4. OUTPUT CLAUSE (來了解它@OMG小馬回答)

決定使用哪一個之前,請考慮它們之間的differencescomparisons

+0

@@ identity之間區別的說明,ident_current永遠不能用於此目的。如果在插入到具有標識的表的表上放置觸發器,則@@ identity將返回不正確的值。 ident_current更加危險,因爲它獲取任何連接使用的最後一個身份,並且很容易導致幾乎無法找到並修復的數據完整性問題。 – HLGEM 2010-11-11 19:09:41

+0

更新了我的回覆。 – Vishal 2010-11-11 19:13:14