0

我想更新我的数据库表中的三个字段/列。其中之一是主键“id”,我使用 Visual Studio 的设置列属性使其自动递增:

Identity Specification: Yes
(Is Identity)         : Yes
Identity Seed         :  1
Identity Increment    :  1

一切正常,但在检查了 2 次后,我清空了表的内容,以便可以重新填充列。但是第一行自动增量列的值是 3。我删除了该行并再次尝试,但在行更新后它变成了 4。我不知道发生了什么。我想我的 linq 代码与它无关,因为它只是插入。

linq背后的代码:

//DLCountryies - .dbml filename
// tblcountry - tablename
// CountryName and CountryCode are Column names
//txtCountryName - textbox

using (DLCountryiesDataContext countries = new DLCountryiesDataContext()) 
{                                                                         
            tblcountry country = new tblcountry
            {
                CountryName = txtCountryName.Text.Trim(),
                CountryCode = txtCountryCode.Text.Trim()
            };

            countries.tblcountries.InsertOnSubmit(country);
            countries.SubmitChanges();
} 
4

3 回答 3

2

您实际上看到了自动增量列的正确行为。标识值不是通过使用表中的当前值确定的。SQL Server 在别处跟踪标识值。

删除记录后,这些值不会重置。该列只是从最后一个值继续计数。

于 2012-10-19T18:48:32.860 回答
1

这是正常的阅读DBCC CHECKIDENTBOL

这将允许您重新设置主键:

http://msdn.microsoft.com/en-us/library/ms176057.aspx

来自 BOL:

USE AdventureWorks2012; GO DBCC CHECKIDENT ("Person.AddressType", RESEED, 0); GO

于 2012-10-19T18:49:07.777 回答
0

这是自动增量的正常行为

如果你想重置自动增量种子,你可以这样做

  1. 截断表格,
    例如。TRUNCATE TABLE tblcountries

  2. 使用 DBCC CHECKIDENT
    例如。

    DELETE FROM tblcountries

    DBCC CHECKIDENT('tblcountries',RESEED, 0)

于 2012-10-20T11:04:02.980 回答