0

データベース テーブルの 3 つのフィールド/列を更新したいと考えています。そのうちの 1 つは主キー「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

自動インクリメント列の適切な動作が実際に見られます。ID 値は、テーブル内の現在の値を使用して決定されるわけではありません。SQL Server は ID 値を別の場所で追跡します。

これらの値は、レコードを削除した後にリセットされません。列は、最後の値から数え続けます。

于 2012-10-19T18:48:32.860 に答える
1

それは で読むのが普通DBCC CHECKIDENTですBOL

これにより、主キーを再シードできます。

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. DBCCCHECKIDENTを使用し
    ます。

    DELETE FROM tblcountries

    DBCC CHECKIDENT('tblcountries',RESEED, 0)

于 2012-10-20T11:04:02.980 に答える