2012-09-25 62 views

回答

8

查找到:Scope_identity

SCOPE_IDENTITY() 

的表,從該表具有標識屬性我們可以得到最後插入的記錄id會是這樣

SELECT SCOPE_IDENTITY() 

OR

但是,這不是一個安全的技術:

SELECT MAX(Id) FROM Ticket 

OR

這也不是一個安全的技術:

SELECT TOP 1 Id FROM Ticket ORDER BY Id DESC 
+4

你的第二個和第三個建議是在併發條件下不安全。 –

+0

有人可以解釋爲什麼Max(id)不起作用嗎? –

+0

這將工作,但同時在表中插入多個條目時會出現問題。例如,在你獲取記錄時,插入另一條記錄,然後你不會得到正確的結果,所以這是在併發條件下...希望你現在清楚了..:)... @ DavidA –

4

您應該使用SCOPE_IDENTITY()獲得最後一個主鍵插入值在你的桌子上。我想它應該是ID的值。一旦你有了它,做一個SELECT使用這個ID,那裏你有它。

也有@@IDENTITY但使用一個或另一個可能會導致值的不準確之間存在一些差異。

檢查更多的見解,這些詳細的文章,關於如何使用它們的詳細說明,爲什麼他們是不同的,一些演示代碼:

2

對於2008 R2 R2 Service Pack 1之前的SQL Server(Link):

使用SCOPE_IDENTITY()和 @@ IDENTITY

當在這種情況下,您可能會收到不正確的值,OUTPUT子句是最安全的機制:

DECLARE @InsertedRows AS TABLE (Id int) 
DECLARE @NewId AS INT 
INSERT INTO HumanResources.Employees 
  ( /* column names */) 
OUTPUT Inserted.Id INTO @InsertedRows 
  VALUES (/* column values */) 
SELECT @NewId = Id FROM @InsertedRows