2016-06-22 14 views
2

VS 2016でデータベースを作成しました。別のテキストボックスに異なる値を入力できるWebApplication(ASP.Net/C#/Entity Framework)も作成しました。これらは私のデータベースに保存されます。すべてのレコードはID(Primary Key)を受け取ります。データベースレコードを削除し、削除したプライマリキーを再利用するにはどうしたらいいですか?

私は、ID 1-5の5つのレコードがあるとします。これらの5つのIDを削除した後に新しいレコードを作成した場合、新しいIDのIDは6ですが、ID 1を再利用したいのですが。

どうすればいいですか?

+5

なぜこれが問題ですか?主キーは一意の識別子です。それはすべて – OTTA

+0

データベース内のID列のID種別値をプログラムでリセットする必要があります。 –

答えて

3

私は、自動増分を使用してID列に新しいキー値を割り当てるとします。レコードがないので、次の空き値は1になると仮定していますが、前の最高値から増分し続けます。

これは悪い考えですが、実際にキー値をリサイクルしたい場合は、自動インクリメントをオフにして手動でキー値を管理することができますが、これはエラーが発生しやすく、困難です。

本当にこれが必要ですか? IntとBigIntは非常に大きな数値を保持できますが、リサイクルが必要となるようにキー値が不足する可能性はありますか?

あなただけのSQLサーバーが削除されたユニークた識別子を追跡しないので、1 I suggest you look at this post

1

私はIDの1-5で5つのレコードがあると言います。これらの5つのIDを削除した後に新しいレコードを作成すると、新しいIDのIDは6ですが、1でなければなりません。

あなたのidカラムは、あなたが持っているのでIdentity.Youは、あなたがテーブルを切り捨てない限り、1

DBCC CHECKIDENT (yourtable, RESEED, 1); 

から再びこの文句を言わない仕事を、あなたの価値を開始するために毎回5行を削除した後commandの下に使用する必要があるようですIDのプライマリキーなので、プライマリキー戦略の作業が必要です

2

これは問題ではありません。あなたのデータベースは、アイデンティティ(1,1)を持つPrimery Keyを持っています。新しいレコードはすべて、最後に追加されたレコードよりも大きなIDを持ちます。あなたはすべての行を削除する場合

あなたは

TRUNCATE TABLE tablename 

を使用することができます。 そうでなければ、自動インクリメントをオフにして、IDの番号をテーブルの小さなIDを探している機能で提供すると考えられます。

1

に戻ってあなたの自動インクリメントをリセットしたい、あなたはその

DBCC CHECKIDENT (yourtable, RESEED, 0); 

これをリセットするには、オプションを1つだけ持っている場合あなたは探していませんが、SQLサーバは削除されたものを追跡しません。

関連する問題