2009年3月6日金曜日

[.NET]INSERT時の自動採番される値を取得する(SQLSERVER)(その3)

GDD Blog: [.NET]INSERT時の自動採番される値を取得する(SQLSERVER)(その2)」ではIDENT_CURRENT()にて、テーブル単位で自動生成されるIDを取得する方法を紹介しました。

このIDなんですが、どうもSQLServer側で管理しているらしく、コネクションを飛びこえて取得できることがわかりました。そのため、INSERT後しばらく処理時間が必要なSQLを実行し、IDENT_CURRENT()で値を取得すると、自分がINSERTした時点で振られるIDと別のIDが取れてしまう可能性があります。
そういうわけで、別の接続からINSERTされている可能性を考慮する必要がありすね。マルチスレッド環境でのstaticなメンバー変数と同じようなイメージです。

SQLServer2008 Express Editionで試す限りでは、トランザクションかけていても制御できないようです。

結局のところINSERTの後@@IDENTITYを参照するなどしたほうが無難ということになりますね。

0 件のコメント: