2016-07-13 3 views
0

Я создал таблицу в SQL с 3 столбцами. Один из ID (с идентификационной спецификацией) и двумя другими столбцами. Я сохранял запись в 2 столбцах через приложение C#, так как столбец идентификатора получает инкремент auto. Итак, все было хорошо до 160-й записи, после чего инкремент ID пошел до 1172, а затем начал приращение оттуда, как 1173, 1174 и т. Д.ID необычный приращение

Я не знаю, сделал ли я что-то неправильно при создании таблицы и идентификатор. Не в состоянии понять. Может ли кто-нибудь помочь. Я прилагаю скриншот.

enter image description here

Edit: Я установил его с помощью запроса.

DBCC CHECKIDENT (mytable, RESEED, 160) 

Теперь колонка идентификатора возвращается к 161 и увеличивает +1. Все хорошо.

+2

Какую версию SQL вы используете? Возможно, вы случайно указали '1172' явно как значение столбца' ID', и в этом случае база данных могла бы просто забрать после этой точки, чтобы продолжить автоинкремент. –

+0

@TimBiegeleisen Использование 2013 Express Edition. И я не указал это число явно. Как я уже сказал, я вставлял запись в таблицу через приложение C#. Использование запроса и идентификатора вставки было сгенерировано автоматически. Это началось с 1 года, и я не получил никаких проблем за 160 дней. a_horse_with_no_name Идентификатор генерируется в последовательности, начиная с 1 и после 160, он отправился в 1172. – Sedate

+1

С SQL Server (по крайней мере) столбцы с автоматическим увеличением не гарантируются как последовательные. Например, если большая вставка была откатна, счетчик не будет сброшен. – Blorgbeard

ответ

0

Как правило, вы увидите это, если были сделаны INSERT в транзакции, которая была откатна. Вот репродукция для сценария:

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' не хватает, и разрыв в Id поле между 2 и 5.