【问题标题】:Auto increment in SQL Server while using linq使用 linq 时在 SQL Server 中自动递增
【发布时间】:2012-10-10 10:33:58
【问题描述】:

我想更新我的数据库表中的三个字段/列。其中之一是主键“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();
} 

【问题讨论】:

  • 您可以在一些简单的 TSQL 中使用 DBCC CHECKIDENT 来重置您的身份,打开管理工作室并启动一个新查询。输入DBCC CHECKIDENT("YourTableName", RESEED, 0)。这将重置您的自动字段。
  • 你也不应该太在意愚蠢的身份证号码。

标签: linq sql-server-2008 auto-increment


【解决方案1】:

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

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

【讨论】:

  • "该列只是从最后一个值继续计数" 但是删除行后最后一个值被保留?
  • @rd4code - 是的。该值不是通过使用表中的数据确定的。 SQL Server 在别处跟踪标识值。
  • @rd4code - 您可以使用 DBCC CHECKIDENT 重置该身份。
  • @Justin Niessner 重启服务器也行 (reseed,0) ?
  • @rd4code - 否。重置的唯一方法是重新设置标识列。一个快速的谷歌搜索(或在这里阅读其他答案)会告诉你如何做到这一点。
【解决方案2】:

BOL 中阅读DBCC CHECKIDENT 是正常的。

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

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

来自 BOL:

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

【讨论】:

    【解决方案3】:

    这是自增的正常行为

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

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

    2. 使用 DBCC CHECKIDENT
      例如。

      DELETE FROM tblcountries

      DBCC CHECKIDENT('tblcountries',RESEED, 0)

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 2012-01-13
      • 2017-03-24
      • 2011-01-31
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多