获取最后插入的行ID(带有SQL语句)

当在表格中插入新logging时,我想获取新创build的ID。

我读了这个: http : //msdn.microsoft.com/en-us/library/ms177564.aspx但它需要创build临时表。

我想在执行INSERT语句之后返回ID(假设只执行一个INSERT)。

例:

1 Joe Joe 2 Michael Mike 3 Zoe Zoe 

当执行INSERT语句时,我想返回创build的ID,意思是4。

可以告诉我怎么做,使用SQL语句或不可能?

如果您的SQL Server表具有INT IDENTITY (或BIGINT IDENTITY )types的列,则可以使用以下命令获取最新的插入值:

 INSERT INTO dbo.YourTable(columns....) VALUES(..........) SELECT SCOPE_IDENTITY() 

只要你没有插入另一行,它就会工作 – 它只是返回在这个范围内发送的最后一个IDENTITY值。

至less有两个选项 – @@IDENTITYIDENT_CURRENT – 在这篇由Pinal Dave在这篇出色的博客文章中,详细了解他们是如何工作的以及他们以何种方式不同(可能会给你意想不到的结果)。

假设一个简单的表格:

 CREATE TABLE dbo.foo(ID INT IDENTITY(1,1), name SYSNAME); 

我们可以在表variables中捕获IDENTITY值以供进一步消耗。

 DECLARE @IDs TABLE(ID INT); -- minor change to INSERT statement; add an OUTPUT clause: INSERT dbo.foo(name) OUTPUT inserted.ID INTO @IDs(ID) SELECT N'Fred' UNION ALL SELECT N'Bob'; SELECT ID FROM @IDs; 

这个方法的SCOPE_IDENTITY()是(a)它处理多行插入( SCOPE_IDENTITY()只返回最后一个值)和(b)它避免了这个并行性错误 ,这可能导致错误的结果 ,但到目前为止只能修复SQL Server 2008 R2 SP1 CU5。

您可以使用:

 SELECT IDENT_CURRENT('tablename') 

访问关于表的最新身份。

考虑以下代码:

 INSERT INTO dbo.MyTable(columns....) VALUES(..........) INSERT INTO dbo.YourTable(columns....) VALUES(..........) SELECT IDENT_CURRENT('MyTable') SELECT IDENT_CURRENT('YourTable') 

这将产生正确的价值为相应的表。

它返回表中生成的最后一个IDENTITY值,而不pipe创build值的连接是什么,也不pipe产生该值的语句的范围如何。

IDENT_CURRENT不受范围和会话的限制; 它仅限于指定的表格。 IDENT_CURRENT返回为任何会话和任何作用域中的特定表生成的标识值。