[解決済み] トランザクションをロールバックしてもSQL Identity(autonumber)がインクリメントされる。
2023-07-13 22:26:22
質問
SQL Server 2005 データベースに SQL を挿入する .net トランザクションがあります。テーブルには ID 主キーがあります。
トランザクション内でエラーが発生した場合
Rollback()
が呼び出されます。行の挿入は正しくロールバックされますが、次にテーブルにデータを挿入すると、ロールバックが発生しなかったかのように ID がインクリメントされます。つまり、本質的に ID シーケンスにギャップがあるのです。このような場合
Rollback()
メソッドで失われた ID を再生させる方法はありますか?
私のアプローチの仕方は間違っているのでしょうか?
どのように解決すればよいのでしょうか?
考えてみれば、自動インクリメントの数値は ではいけないのでしょうか? はトランザクション的であるべきです。 もし他のトランザクションが自動インクリメント番号が使用されるかロールバックされるかを待たなければならないとしたら、それらは自動番号を使用している既存のトランザクションによってブロックされることになります。 たとえば、ID列に自動番号フィールドを使用するテーブルAでの、以下の私の偽のコードを考えてみましょう。
User 1
------------
begin transaction
insert into A ...
insert into B ...
update C ...
insert into D ...
commit
User 2
-----------
begin transaction
insert into A ...
insert into B ...
commit
ユーザー2のトランザクションがユーザー1のトランザクションの1ミリ秒後に開始された場合、テーブルAへの挿入は、Aへの最初の挿入から自動番号が使用されたかどうかを確認するために、ユーザー1のトランザクション全体が完了するまで待機しなければならないでしょう。
これは機能であり、バグではありません。 自動番号を厳密に連続させる必要がある場合は、自動番号を生成するために別のスキームを使用することをお勧めします。
関連
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] Marginのプロパティ順
-
[解決済み] EF Coreのadd-migrationのビルドに失敗しました。
-
[解決済み] WinSCP 応答待ちタイムアウト
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] SQL Serverでレコードを削除した後、IDシードをリセットする。
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ServicePointManagerは、*スキームのプロキシをサポートしていません[closed]。
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] DockPanelを空きスペースいっぱいに表示させる方法
-
[解決済み] gacutil.exeはどこですか?
-
[解決済み] ファイルまたはアセンブリをロードできませんでした 操作がサポートされていません。(HRESULT: 0x80131515 からの例外)
-
[解決済み] CryptographicException「キーセットが存在しない」、ただしWCF経由に限る
-
[解決済み] Moq Callbackについて教えてください。
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?