RESEED идентификационные столбцы в базе данных - PullRequest
8 голосов
/ 12 ноября 2010

Могу ли я использовать

DBCC CHECKIDENT(<table_name>, RESEED, value)

команда для сброса текущего значения столбца идентификаторов к исходному в SQL Server 2008?

Если да, это правильный способ выполнения этой операции без каких-либо недостатков? Если нет, есть ли альтернативный способ сделать это?

Ответы [ 3 ]

10 голосов
/ 12 ноября 2010

Значение может быть опущено.Поэтому, если вы используете

DBCC CHECKIDENT (<table_name>, RESEED);

, SQL Server устанавливает значение идентификатора на следующий правильный номер - в соответствии с уже используемыми номерами.Это единственный способ изменить значения идентичности, которые я знаю.

8 голосов
/ 12 ноября 2010

Можно ли использовать команду DBCC CHECKIDENT для сброса текущего значения столбца идентификаторов на исходное значение в SQL Server 2008?

Да.

Если да, это правильный способ выполнения этой операции без каких-либо недостатков?

Это единственный документированный способ сделать это.

Возможные недостатки: в конечном итоге вы можете получить дубликаты IDENTITY значений - от SQL Server нет никакой гарантии, что он не вернет значение, которое еще не используется.

например. если ваш IDENTITY в настоящее время равен 100, и вы сбросили его на 1, шансы рано или поздно будут получены, и это значение уже используется.

IDENTITY, реализованный в SQL Server, не проверяет существующие значения или что-либо еще - он просто генерирует последовательные числа. Это зависит от вас - особенно если вы сделали RESEED для этого IDENTITY, чтобы убедиться, что значения не дублируются.

0 голосов
/ 16 февраля 2011

Он имеет большой недостаток тогда и только тогда, когда полевой файл является первичным ключом и ссылкой на любой внешний ключ в любой другой таблице. повторное заполнение помогает извлекать записи в таблице транзакций, имеющих индексы на поле.

...