質問

sql server 2005:従業員のテーブルにid on。というカラムがあり、テーブルにデータを挿入する際にエラーが発生した場合は.identityがインクリメントされます。 1から5までのemp idを生成し、6番目のレコード挿入エラーocurrsで生成され、次のレコード挿入ID値は7になります。

役に立ちましたか?

解決

なぜそれをしたいのですか?

ID列はデータベースの「内部管理値」としてのみ使用する必要があり、「ビジネス値」を持たない必要があるため、そのシーケンスにギャップがあることが重要なのはなぜですか?
IDが正しく使用されている場合、ソフトウェアのユーザーはID値を持つ列に直面することはありません。レコードを一意に識別するために使用します。

他のヒント

これができるとは思わない。 ID番号を正確に連続させたい場合は、SQL ID機能を使用するのではなく、自分で生成する必要があります。

編集:失敗したトランザクションをロールバックしても、IDカウントは下がりません。これは仕様によるものです。この他の質問

ギャップがある場合、どのようなビジネス上の理由で世話をしますか?データベースが気にする理由はなく、古いレポートなどに基づいて情報を検索する際にデータの整合性に大きな問題を引き起こす可能性があるため、ID値が他の目的に再利用されないようにする必要があります。先月の注文を表示するレポート。その後、顧客が重複して重複除去されたため、レコードの1つを削除します。次に、削除された重複顧客のIDフィールドを再利用します。さて、先月のレポートを見ていた誰かが顧客12345を調べに行き、そのクイゾマーに関連するデータはサリージョーンズではなくジョンスミスに属します。しかし、彼女はアグリゲートを使用しているので、その人は完全に回避可能な誤った情報を持っていることを知らないでください。彼女が削除済みの顧客を検索していた場合、プロセスは代わりに、重複除去後に残った正しい顧客にリダイレクトすることができます。

この特定の動作が必要な場合は、ストアドプロシージャを使用してIDを生成する必要があります。このようにして、本当にロールバックできます。ただし、現在の動作は目的によるものです。 現在または次のID値を保持するmasterdataテーブルのidフィールドでロックを使用しないと、トランザクションの分離と異なる読み取りレベル(ダーティリード)で問題が発生する可能性が高くなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top