我已经创建的表在我的分贝在此声明实际插入的行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