我想从表中检索最新插入甚至更新的标识。但是每当我编写以下代码时,根本没有结果。
select *
from PersonHowEducation prh
inner join HowzeEducation he on prh.HowzeEducationId = he.HowzeEducationId
where he.HowzeEducationId = @@IDENTITY
我该怎么办?
我想从表中检索最新插入甚至更新的标识。但是每当我编写以下代码时,根本没有结果。
select *
from PersonHowEducation prh
inner join HowzeEducation he on prh.HowzeEducationId = he.HowzeEducationId
where he.HowzeEducationId = @@IDENTITY
我该怎么办?
如果这是批处理脚本的一部分,并且您只是将它插入到同一个会话中,那么您将使用 SCOPE_IDENTITY() 来检索最后插入的HowzeEducationId
值。
select * from PersonHowEducation prh inner join HowzeEducation he on
prh.HowzeEducationId=he.HowzeEducationId
where he.HowzeEducationId=SCOPE_IDENTITY()
但是,如果这是来自一个完全不同的会话,一个不只是执行插入的会话,那么您可以使用插入的最后一条记录
select * from PersonHowEducation prh inner join HowzeEducation he on
prh.HowzeEducationId=he.HowzeEducationId
where he.HowzeEducationId=(select top(1) HowzeEducationId from HowzeEducation
order by HowzeEducationId desc)
注意:在极少数情况下,身份插入不会在表中创建最大的 id,例如,如果有人决定表应该有 1 条 id=1,000,000,001 的记录并手动将身份重新设置为 10,001。
另一种选择,如果可以在插入后删除记录,则可能会失败。
select * from PersonHowEducation prh inner join HowzeEducation he on
prh.HowzeEducationId=he.HowzeEducationId
where he.HowzeEducationId=(SELECT IDENT_CURRENT('HowzeEducation'))