【问题标题】:Rearrange the autoincrement column value after deleting some rows删除一些行后重新排列自动增量列值
【发布时间】:2015-04-06 08:02:29
【问题描述】:

表中的 ID 列等列会自动递增的情况。这只是意味着下一次插入到表中的 ID 将比前一个多一个 ID,因此所有 ID 都是唯一的。

但是,如果您从表中删除一行,则该表将自动递增,就好像该行根本没有被删除一样。结果是数字序列中的间隙。这通常不是什么大问题,但您可能需要重置自动增量字段。

PatientNo 是主键,这是我目前尝试过的代码

    private void txtincr()
    {
        int a;
        if (textPatientNo.Text == "")
        {
            if (con.State == 0)
            {
                con.Open();
            }
            string Query= "select PatientNo from PatientRegistration";
            SQLiteDataAdapter DataAdapter = new SQLiteDataAdapter(Query,con);
            DataSet PatientDataSet = new DataSet();
            DataAdapter.Fill(PatientDataSet);
            if (PatientDataSet.Tables[0].Rows.Count != 0)
            {
                a = PatientDataSet.Tables[0].Rows.Count;
                a = a + 1;
                textPatientNo.Text = Convert.ToString(a);
                textPatientName.Focus();
            }
            else
            {
                textPatientNo.Text = "1";
                textPatientName.Focus();
            }
            con.Close();
        }
    }

【问题讨论】:

  • 为什么需要这样做?
  • 只有我一个人无法回答这个问题吗?请再解释一下 - 您想要重置的时间和地点

标签: c# .net sqlite auto-increment


【解决方案1】:
You can try using the SQL Query

    DBCC CHECKIDENT('TABLENAME',RESEED,initialvalue);

【讨论】:

  • 这个问题是关于 SQLite 的。
【解决方案2】:

当您将该列声明为 INTEGER PRIMARY KEY 后,您无需执行任何操作,因为数据库会自动使用表中最大值之后的下一个值。

当您将列声明为 INTEGER PRIMARY KEY AUTOINCREMENT 时,当前计数器存储在sqlite_sequence 表中。你可以简单地modify it by updating that table

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多