2016-07-13 10 views
0

私は3列のSQLでテーブルを作成しました。 IDの1つ(アイデンティティの指定がオン)および他の2つの列。私は2列のレコードをc#アプリケーションで保存していましたが、ID列は自動的にインクリメントされます。 ID記録は1172になり、1173、1174などのようにIDインクリメントが1172になりました。IDが異常に増加する

テーブル作成中に何か問題があったのかどうかわかりませんおよびID列。理解できません。誰かが案内してくれますか?私はスクリーンショットを添付しています。

enter image description here

編集:私は、クエリを使用して、それを修正しました。

DBCC CHECKIDENT (mytable, RESEED, 160) 

ここで、ID列は161に戻って+1をインクリメントします。すべての良い。

+2

使用しているSQLのバージョンは?誤って 'ID2'カラムの値として明示的に' 1172'を指定した可能性があります。その場合、データベースは自動的にインクリメントするためにそのポイントの後にピックアップするかもしれません。 –

+0

@TimBiegeleisen 2013 Express Editionを使用しています。そして私はこの番号を明示的に指定していませんでした。 私が言ったように、C#アプリケーションを通してテーブルにレコードを挿入していました。挿入クエリとIDを使用して自動生成されました。それは1から始まり、私は160日で何の問題もなかった。 a_horse_with_no_name IDは順番に生成されていて、1から開始され、160より後には1172になりました。 – Sedate

+1

SQL Serverでは、自動インクリメント列は連続しているとは限りません。たとえば、大きな挿入がロールバックされた場合、カウントはリセットされません。 – Blorgbeard

答えて

0

通常、ロールバックされたトランザクションでINSERTが実行された場合、これが表示されます。ここにあなたのシナリオのREPROです:

CREATE TABLE #Test (
    Id INT IDENTITY(1, 1) PRIMARY KEY, 
    Txt NVARCHAR(100) 
); 

INSERT INTO #Test (Txt) VALUES ('A'), ('B'); 

BEGIN TRAN mytran 
INSERT INTO #Test (Txt) VALUES ('C'), ('D'); 
ROLLBACK TRAN mytran 

INSERT INTO #Test (Txt) VALUES ('E'), ('F'); 

SELECT * FROM #Test; 

DROP TABLE #Test; 

この意志の出力は:

Id Txt 
1 A 
2 B 
5 E 
6 F 

だから、 'C' と 'D' 不足している、と25Id分野でのギャップを。

関連する問題