我正在使用SQL Server Express和VS2008。
我有一个包含表格A
的数据库,其中ID
列为IDENTITY
。 ID自动递增。即使删除了该行,ID
仍然会增加。
经过多次数据处理后,当前ID
已达到15,例如。
当我运行应用程序时
进一步的数据操作(例如删除或更新)将导致未处理的异常。
有没有人遇到过这个?
PS。在我的表定义中,ID已被选择如下:
Identity Increment = 1; Identity Seed =1;
数据库加载代码为:
dataSet = gcnew DataSet();
dataAdapter->Fill(dataSet,"A");
dataTable=dataSet->Tables["A"];
dbConnection->Open();
更新按钮方法
dataAdapter->Update(dataSet,"tblInFlow");
dataSet->AcceptChanges();
dataTable=dataSet->Tables["tblInFlow"];
dataGrid->DataSource=dataTable;
如果我按更新:
如果至少有一行:datagrid视图会更新并正确显示该表。
如果表中没有任何内容(没有数据行),Add方法将添加一个新行,但是从ID 0开始。 如果我关闭程序并重新启动它:ID将是16,这是正确的。
这是添加方法
row=dataTable->NewRow();
row["column1"]="something";
dataTable->Rows->Add(row);
dataAdapter->Update(dataSet,"A");
dataSet->AcceptChanges();
dataTable=dataSet->Tables["A"];
答案 0 :(得分:1)
如果您使用
删除日期 Delete from myTable
它不会重置标识列,但另一方面,如果截断表,则会将任何标识列重置为默认种子值(在您的情况下从1开始) 如果要截断表格然后重新播种,则第一个标识重新设定的值如果写入
将为0 DBCC CHECKIDENT(MyTable, RESEED, 0)
即使您的标识列指定为Identity = 1且seed = 1,插入的第一行也将从Id = 0开始
如果您想从1开始,则需要将列重新设置为
DBCC CHECKIDENT(MyTable, RESEED, 1)