2009-05-05 10 views
1

SQL Server 2005:IDがオンの従業員テーブルに列empidがあります。テーブルにデータを挿入中にエラーが発生しました。もしレコードが挿入されていれば、私は1から5のemp idを生成してから6番目のレコードに挿入エラーが発生します。次のレコード挿入のID値は7になります.iは6になります。レコードが挿入されている場合にのみ、IDが増分されます。

答えて

2

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

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

1

I don 'これができると思います。 ID番号が正確に順次になるようにするには、SQL ID機能を使用するのではなく、自分で生成する必要があります。

編集:失敗したトランザクションをロールバックしても、IDカウントは元に戻されません。これは設計上のものです。this other questionを参照してください。

0

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

1

ギャップがある場合には、有効なビジネス上の理由はありますか?データベースが気にする必要はなく、古いレポートなどに基づいて情報を検索することでデータの整合性に重大な問題を引き起こす可能性があるため、アイデンティティ値が決して他のものに再利用されないようにする必要があります。レポートは先月に注文を表示し、顧客が重複して減額されたためにレコードの1つを削除します。次に、削除された二重化された顧客のIDフィールドを再利用します。先月のレポートでは、顧客12345を検索し、その料理人と関連するデータはSally JonesではなくJohn Smithに属していました。その人はそれを知っていません;彼女は集団を使用していることを知っています。だから、彼女は間違った情報を持っています。彼女が亡くなられた顧客を探していたのであれば、そのプロセスは、控除後に正しい顧客にリダイレクトされた可能性があります。

関連する問題