我已經創建的表在我的分貝在此聲明實際插入的行ID
CREATE TABLE tPerson
(
id INT NOT NULL PRIMARY KEY identity(1,1)
, name NVARCHAR(100) not null
, email NVARCHAR(30) not null
)
GO
現在我插入帶有插入新的價值。我的問題是如何獲得當前添加的行的ID?任何想法 ??
我已經創建的表在我的分貝在此聲明實際插入的行ID
CREATE TABLE tPerson
(
id INT NOT NULL PRIMARY KEY identity(1,1)
, name NVARCHAR(100) not null
, email NVARCHAR(30) not null
)
GO
現在我插入帶有插入新的價值。我的問題是如何獲得當前添加的行的ID?任何想法 ??
假設SQL服務器,您應該檢出this article以更好地理解檢索身份。
這裏有一個片段:
SELECT @@ IDENTITY
它返回一個 連接最後產生的IDENTITY值,不管產生的數據表,並 不管產生價值的陳述的範圍。 @@ IDENTITY將返回您當前會話中輸入到 表中的最後一個標識值。雖然@@ IDENTITY僅限於當前的 會話,但它不限於當前範圍。如果在導致在另一個表中創建標識的表上有觸發器 ,則您的 將獲得最後創建的標識,即使它是創建該標識的 觸發器。
SELECT SCOPE_IDENTITY()
它返回上 的連接,並通過在同一範圍的陳述所產生的最後一個標識值,而不管 表的所產生的值。 SCOPE_IDENTITY(),如@@ IDENTITY, 將返回當前會話中創建的最後一個標識值,但其 也會將其限制爲您當前的範圍。換句話說,它將返回您明確創建的最後一個標識值,即 ,而不是由觸發器或用戶定義的函數創建的任何標識。
SELECT IDENT_CURRENT(「表名」)
它返回一個表中產生的最後一個標識值 ,而不考慮創建該 值的連接的,也不管所產生的聲明的範圍的值爲 。IDENT_CURRENT不受範圍和會話的限制;它是 限於一個指定的表。 IDENT_CURRENT返回爲任何會話和任何範圍中的特定表生成的標識值 。
並且不要忘記OUTPUT子句。這是可靠的! [參考Microsoft連接](https://connect.microsoft.com/SQLServer/feedback/details/328811/scope-identity-sometimes-returns-incorrect-value) – HABO 2012-02-13 01:56:53
它看起來像SQL服務器,並且這種情況下,只需使用:
INSERT INTO dbo.tPerson(....) VALUES(.....)
DECLARE @NewID INT
SELECT @NewID = SCOPE_IDENTITY()
SCOPE_IDENTITY
返回在當前的範圍內最後插入IDENTITY值。
注意:「電子郵件」只有30個字符!!?我通常做,在我的表中的最長柱 - 200個字符甚至更多:-)
嘗試
SELECT @@IDENTITY AS LastID
你INSERT後
[您應該使用'SCOPE_IDENTITY()' - **而不是**'@@ IDENTITY'](http://blog.sqlauthority.com/2007/03/25/sql- server @ identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record /) - '@@ IDENTITY'可以意外地返回錯誤的結果.... – 2012-02-12 18:25:00
使用@@IDENTITY
或SCOPE_IDENTITY
MS SQL Server的:)
我建議總是使用'SCOPE_IDENTITY ()' - 其他選項往往具有意想不到的副作用和結果.... – 2012-02-12 18:27:07
您也可以通過JDBC直接執行此操作以避免選擇,因爲通常情況下,插入語句將返回您可能要驗證的插入行數。 Spring通過它的JdbcTemplate支持這個,參見here
哪個數據庫? SQL Server? MySQL的?甲骨文?它們具有完成此功能的不同功能。 – 2012-02-12 18:18:03
對於SQL Server,請參閱[鏈接](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-記錄/) – 2012-02-12 18:24:34
MS SQL Server 2008 R2 Express – Jacek 2012-02-12 18:38:26