Однако прямо в сообщении об ошибке есть подсказка как
это ограничение обойти. Для того чтобы писать напрямую в автоинкрементный
столбец, необходимо установить свойство IDENTITY_INSERT в ON.
SET IDENTITY_INSERT Ident_table ON
GO
INSERT INTO Ident_table (ID, some_values) VALUES (5, 'value 5')
SELECT * FROM Ident_table
--- результат:
ID some_values
----------- --------------------------------------------------
1 value 1
2 value 2
5 value 3
(3 row(s) affected)
|
Но здесь другая тонкость, если при отключенной
автогенерации не указать явно, какое значение необходимо вставить в
автоинкрементное поле, то вставка опять-таки успехом не увенчается.
INSERT
INTO Ident_table (some_values) VALUES ('value 4')
--- результат:
Explicit
value must be specified for identity column in table 'Ident_table'
when
IDENTITY_INSERT is set to ON.
|
Таким образом, возможно два варианта заполнения
автоинкрементного столбца, либо этим занимается сервер, и тогда невозможно явно
изменить значение в этом поле, либо это делается вручную, но тогда это поле
обязательно к заполнению.
ПРЕДУПРЕЖДЕНИЕ
Следует помнить, что если
автоинкрементное поле заполняется самостоятельно и на это поле не установлено
никаких дополнительных требований уникальности, то запросто можно записать
туда несколько одинаковых значений.
|
Если же теперь опять вернуть серверу возможность
вставлять номера в автоинкрементное поле, то следующее значение будет больше, на число указанное в increment при создании столбца, самого большого значения в
этом поле. Не важно вручную было введено это самое большое значение или
сгенерировано сервером.