sqlserverでインサート後ロールバックした際に@@identityが戻らない
あるSP(ストアドプロシージャ)でインサートしたレコードのIDを@@IDENTITYで取得しているのですが、
ロールバック処理で戻しているのにもかかわらず、
再度同じ処理をするとIDがオートインクリメントされて
取得されてしまいます。
テーブルにインサートされた実体はないにもかかわらず、
2度目のインサートでは前回+1のIDが取得されるので、
取得したIDで他のテーブルにインサートかけると
FOREIGN KEY 制約に引っかかりエラーになってしまいます。
http://msdn.microsoft.com/ja-jp/library/ms175464.aspx
完全にはまりました。
何とか解決策をみつけます。
・・・・
と言ってるそばから、
発見しました。
http://msdn.microsoft.com/ja-jp/library/ms187342%28SQL.90%29.aspx
抜粋)
INSERT ステートメントか SELECT INTO ステートメント、または一括コピーが失敗した場合、
あるいは、トランザクションがロールバックされた場合、@@IDENTITY 値は前の設定に戻りません。
あれ、てことはうかつに@@IDENTITYはしてはだめなのでは?
一度でもロールバック処理したら、それから先はすべてエラーになる?
難しいです。。
@@IDENTITYを使用しない方法でいきたいと思います。