0

テーブルから、挿入された、または更新された最新のIDを取得したいと思います。しかし、私が次のコードを書くときはいつでも、結果はまったくありません。

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挿入によってテーブルに最大のIDが作成されない場合がまれにあります。たとえば、テーブルにid = 1,000,000,001のレコードが1つあると判断し、IDを手動で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 に答える