2012-10-19 57 views
0

我想更新數據庫表中的三個字段/列。其中之一是主鍵「身份證」,我把它使用Visual Studio的設置列屬性自動遞增:在使用linq時在SQL Server中自動增量

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(); 
} 
+0

您可以使用DBCC CHECKIDENT在一些簡單的TSQL重置您的身份,打通管理工作室,並啓動一個新的查詢。輸入'DBCC CHECKIDENT(「YourTableName」,RESEED,0)'。這將重置您的汽車領域。 – JonH

+0

你也不應該太在意愚蠢的身份證號碼。 – JonH

回答

2

你實際看到的自動遞增列的正確行爲。身份值不是通過使用表中的當前值來確定的。 SQL Server在別處跟蹤標識值。

刪除記錄後,這些值不會重置。該列只是從最後一個值繼續計數。

+0

「列簡單地繼續從最後一個值開始計數」但刪除行後,最後一個值被保留了嗎? – Nil

+1

@ rd4code - 是的。該值不是通過使用表中的數據確定的。 SQL Server在別處跟蹤標識值。 –

+0

@ rd4code - 您可以使用'DBCC CHECKIDENT'來重置該身份。 – JonH

0

這是自動增量

的正常行爲

如果要重置自動增量種子,你可以做

  1. 截斷表
    如。 TRUNCATE TABLE tblcountries

  2. 使用DBCC CHECKIDENT
    例如,

    DELETE FROM tblcountries

    DBCC CHECKIDENT('tblcountries',RESEED, 0)