0

id というID列を持つデータベースにテーブルを作成しました。このテーブルからデータを削除して新しいデータを追加すると、ID 列が 1 増えたままです。削除されたテーブルではなく、このテーブル内の最後の ID からこの列を増やし始める必要があります。どうすればよいですか?

これは、いくつかのレコードを含む datagridview です。 ここに画像の説明を入力

これは削除コードです

if (comboBoxdelete.SelectedIndex != -1)
{
    SqlConnection con = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    con.ConnectionString = "Data Source=MOHAMEDSAFWAT;Initial    Catalog=Card;Integrated Security=True";
    cmd.CommandText = "DELETE FROM [Employee] WHERE [int]=@id1";
    cmd.Connection = con;
    cmd.Parameters.AddWithValue("@id1", comboBoxdelete.SelectedItem);
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
    load();
    View();
}
else
{
    MessageBox.Show(" Please Insert  ID First");
}
4

1 に答える 1

2

ID 列 (SQL サーバー内) は RDBMS によって処理されます。テーブルに行を追加するたびに増加します。行を削除すると、RDBMS は ID 列の基になるシーケンスをロールバックしません。
テーブルの ID または主キーは、アプリケーションの内部使用のためのものです。通常、それらをユーザーに表示してはなりません。
エンド ユーザーの行番号として id 列を使用しないでください (ユーザーに表示されるものはすべて、更新または削除を要求される妥協者になるため)
ところで、id 列を手動で実装して完全に入力する必要があると考えてみましょう。要件。簡単なアプローチを使用できます。最初に新しい行を追加するときは、select を呼び出して新しい ID をフェッチします。

SELECT ISNULL(count(*),0)+ 1 as newid from Employee

新しいIDになります。
削除シナリオを知っているので、あると思います

Employee1-->id = 1 
Employee2-->id = 2 
Employee3-->id = 3 
Employee4-->id = 4 

今、削除するEmployee2ので、何をする必要がありますか?
要件を達成するには、次のような更新が必要です (更新する行を検出した後)。

  Update Employee3 set id = 2 
  Update Employee4 set id = 3

テーブル内のすべての行に!
大量のデータでは機能しません。id は更新時の主キーであり、すべての子レコードも更新する必要があり、インデックスの再作成、テーブルのロックなどは避けられません。これはすべて、id 列がユーザーに表示されており、それを順番に表示する必要があるためです。
これらのシナリオのような別の非キー列Employee-Numberまたは UI レベルの列をRowNumber使用し、主キーをユーザーに表示しません。

于 2013-09-28T20:38:30.657 に答える