0

我想从表中检索最新插入甚至更新的标识。但是每当我编写以下代码时,根本没有结果。

select * 
from PersonHowEducation prh 
inner join HowzeEducation he on prh.HowzeEducationId = he.HowzeEducationId
where he.HowzeEducationId = @@IDENTITY

我该怎么办?

4

1 回答 1

1

如果这是批处理脚本的一部分,并且您只是将它插入到同一个会话中,那么您将使用 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'))
于 2012-10-06T06:05:22.370 回答