为了账号安全,请及时绑定邮箱和手机立即绑定

获取最后插入的行ID(使用SQL语句)

/ 猿问

获取最后插入的行ID(使用SQL语句)

aluckdog 2019-11-14 15:35:01

当您在表中插入新记录时,我想获得新创建的ID。


我读了这篇文章:http : //msdn.microsoft.com/en-us/library/ms177564.aspx,但是它需要创建临时表。


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


例:


1     Joe      Joe

2     Michael  Mike

3     Zoe      Zoe

执行INSERT语句时,我想返回创建的ID,表示4。


可以告诉我如何使用SQL语句执行此操作吗?


查看完整描述

3 回答

?
海绵宝宝撒

如果您的SQL Server表的列类型为INT IDENTITY(或BIGINT IDENTITY),则可以使用以下方法获取最新的插入值:


INSERT INTO dbo.YourTable(columns....)

   VALUES(..........)


SELECT SCOPE_IDENTITY()

只要您没有插入另一行,此方法就起作用-它只返回IDENTITY此处在此范围中分发的最后一个值。


在Pinal Dave撰写的这篇出色的博客文章中,至少还有两个选项- @@IDENTITY并IDENT_CURRENT详细了解它们的工作方式以及它们与众不同的方式(可能会给您带来意想不到的结果)。


查看完整回答
反对 回复 2019-11-14
?
慕田峪9158850

假设一个简单的表:


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

我们可以捕获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;

关于此方法的好处是(a)处理多行插入(SCOPE_IDENTITY()仅返回最后一个值),并且(b)避免了此并行错误,该错误可能导致错误的结果,但到目前为止仅在SQL Server 2008中已修复R2 SP1 CU5。


查看完整回答
反对 回复 2019-11-14
?
喵喔喔

您可以使用:


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无论创建该值的连接如何,以及生成该值的语句的范围如何,它都会返回表中生成的最后一个值。


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


查看完整回答
反对 回复 2019-11-14
  • 3 回答
  • 0 关注
  • 55 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信