0

我正在使用 SQL Server Express 和 VS2008。

我有一个带有表的数据库A,其中有一ID列为IDENTITY. ID 是自动递增的。即使该行被删除,ID仍然会增加。

经过几次数据操作,当前ID已经达到了15个,例如。

当我运行应用程序时

  • 如果至少有 1 行:如果我添加新行,则新 ID 为 16。一切都很好。
  • 如果表为空(无行):如果我添加一个新行,新的ID为0,这是一个错误(我认为)。

进一步的数据操作(例如删除或更新)将导致未处理的异常。

有没有人遇到过这个?

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;

如果我按更新:

  • 如果至少有一行:数据网格视图会更新并正确显示表格。

  • 如果表中没有任何内容(无数据行),则 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"];
4

1 回答 1

1

如果您使用删除日期

 Delete from myTable

它不会重置标识列,但另一方面,如果您截断表,那么它将任何标识列重置为默认种子值(在您的情况下从 1 开始)如果您要截断表然后重新播种,则第一个如果你写,identity reseed 值将是 0

 DBCC CHECKIDENT(MyTable, RESEED, 0)

即使您的身份列被指定为 Identity=1 和种子 =1 ,插入的第一行将从 Id=0 开始

如果要从 1 开始,则需要将列重新设置为

 DBCC CHECKIDENT(MyTable, RESEED, 1)
于 2012-06-04T04:22:56.930 回答