這是我的表格。SQL SERVER 2008 GET LAST INSERTED VALUES
Ticket(id int auto_increment,name varchar(50));
插入到這個表後,我想發送ID和名稱的郵件.. 我怎樣才能獲得最後插入值。
有助於解決這個...
這是我的表格。SQL SERVER 2008 GET LAST INSERTED VALUES
Ticket(id int auto_increment,name varchar(50));
插入到這個表後,我想發送ID和名稱的郵件.. 我怎樣才能獲得最後插入值。
有助於解決這個...
查找到: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
您應該使用SCOPE_IDENTITY()
獲得最後一個主鍵插入值在你的桌子上。我想它應該是ID
的值。一旦你有了它,做一個SELECT
使用這個ID,那裏你有它。
也有@@IDENTITY
但使用一個或另一個可能會導致值的不準確之間存在一些差異。
檢查更多的見解,這些詳細的文章,關於如何使用它們的詳細說明,爲什麼他們是不同的,一些演示代碼:
對於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
你的第二個和第三個建議是在併發條件下不安全。 –
有人可以解釋爲什麼Max(id)不起作用嗎? –
這將工作,但同時在表中插入多個條目時會出現問題。例如,在你獲取記錄時,插入另一條記錄,然後你不會得到正確的結果,所以這是在併發條件下...希望你現在清楚了..:)... @ DavidA –