IDENTITY列のあるテーブルがあります。開発中、時々行を削除して再度追加します。しかし、IDENTITYの値は常に増加し続け、再度追加したときに1から始まっていませんでした。これで私のIDは68-> 92になり、これによりコードがクラッシュします。
IDENTITY値をリセットするにはどうすればよいですか?
次の方法でID値をリセットできます。
DBCC CHECKIDENT('tableName', RESEED, 0)
したがって、次にTableNameに挿入するとき、挿入されるID値は1になります。
テーブルから行をdelete削除すると、Identity値はリセットされませんが、増加し続けます。あなたの事件で起こったことのように。
これで、テーブルをtruncateすると、ID値がテーブルの元のSeed値にリセットされます。
詳細な例と 切り捨てと削除の違い の詳細な例といくつかの適切な説明については、 SQL SERVER – DELETE、TRUNCATEおよびRESEED Identity を参照してください。
KinはIDENTITY値をリセットする方法を示しましたが、実際にデータのallを削除する場合、開発環境の外では、なぜこれを行う必要があるのですか?
本番環境では、IDENTITY値の連続したシーケンスを維持するつもりはないでしょう。そして、IDENTITY値をハードコードするコードを実際に作成していないことを願っています。これらが意味のあるID値である場合は、IDENTITYプロパティの使用を停止する必要があります。
これが起こらないようにするいくつかの事柄があります:
つまり、ギャップを気にする場合、またはこれらの値に特定の意味を与えたい場合は、IDENTITYの使用を停止してください。テーブルを削除して再作成し、値を削除して再入力する必要がある場合は、更新を実行するか、その列のハードコードされた値を使用して挿入を実行します。
余談ですが、主キーとIDは同じものではありません。 ID列は、明示的に定義しない限り、主キーではありません。また、ID列ではない主キーを確実に持つことができます。