Предотвратить неудачную вставку от получения следующего значения удостоверения - PullRequest
1 голос
/ 03 мая 2011

Когда INSERT не попадает в таблицу с автоматически увеличивающимся полем идентификатора, идентификатор все еще увеличивается, создавая тем самым пробелы в последовательности идентификаторов.Есть ли способ избежать этого?

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

Единственный способ сделать это - заново заполнить таблицу или создать собственный генератор идентификаторов.

пример

CREATE TABLE test(id INT IDENTITY, bla INT)

INSERT test VALUES(1)
INSERT test VALUES('b') --fails


DBCC CHECKIDENT(test,RESEED,1) --RESEED table
INSERT test VALUES(1)
SELECT * FROM test

DROP TABLE test

На занятом столе вы можете получить вставки после этого, и повторное заполнение выигранобольше не правильно Но зачем тебе это?Кому интересно, если есть пробелы

1 голос
/ 03 мая 2011

Случайная идея из левого поля: определите, что на самом деле является причиной неудачных вставок, и проверьте , что , хотя, конечно, понимая, что из-за проверок и вставок, не являющихся атомарными, вы все равно можете получить ошибки (для такие вещи, как дубликаты в уникальных полях).

Кажется, разрыв в идентичности - это симптом , неудача - болезнь . Лечи болезнь.

0 голосов
/ 03 мая 2011

Как правило, вы хотите, чтобы ключ не имел никакого значения, кроме идентификации записи.Это означает, что если в нумерации есть пробелы, это не должно иметь значения.Если вы вставляете запись в другую связанную таблицу, вы всегда можете использовать SCOPE_IDENTITY() в своем сохраненном процессе / триггере и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...