2012-10-06 36 views
0

我想从表格中检索最新插入的或甚至更新的标识。但是每当我编写下面的代码时,根本没有结果。如何从表中获取最新插入的标识?

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

我该怎么做?

回答

1

如果这是批处理脚本的一部分,并且您只是将它插入到同一个会话中,那么您将使用SCOPE_IDENTITY()来检索最后插入的HowzeEducationId值。

select * from PersonHowEducation prh inner join HowzeEducation he on 
     prh.HowzeEducationId=he.HowzeEducationId 
     where he.HowzeEducationId=SCOPE_IDENTITY() 

但是,如果这是一个完全不同的会话,一个没有JUST执行插入,那么你可以得到的最后一个记录利用插入

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) 

注:有可能例如,如果某人决定某个表应该有1条ID = 1,000,000,001的记录,并且手动将该标识手动重新标识为10,001,那么在极少数情况下,身份插入操作可能会导致而非创建表中最大的ID。

另一种替代方案,如果插入后可能删除记录,则可能会发出嘶嘶声。

select * from PersonHowEducation prh inner join HowzeEducation he on 
     prh.HowzeEducationId=he.HowzeEducationId 
     where he.HowzeEducationId=(SELECT IDENT_CURRENT('HowzeEducation')) 
+0

但有时候有人更新他的字段和该人的Id不在最后一行(可能在其他行),所以我想找到更新的HowzeEducationId。那可能吗? –

+0

我刚刚给你两种情况。第一个查询是如果这个人自己做了更新 - 回来使用SCOPE_IDENTITY()。另一个是找到最后一个插入“被任何人” – RichardTheKiwi

相关问题