RESEED столбцы идентификаторов в базе данных

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

DBCC CHECKIDENT(<table_name>, RESEED, value)

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

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


person Lorenzo    schedule 12.11.2010    source источник
comment
На самом деле здесь три вопроса. Я уверен, что вы можете их увидеть... если вам нужны дополнительные объяснения, просто спросите   -  person Lorenzo    schedule 12.11.2010


Ответы (3)


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

да.

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

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

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

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

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

person marc_s    schedule 12.11.2010

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

DBCC CHECKIDENT (<table_name>, RESEED);

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

person Manfred Sorg    schedule 12.11.2010
comment
НАПРИМЕР: Настройка вашей личности, чтобы начать с 2000: DBCC CHECKIDENT (<table_name>, RESEED, 2000) - person Tr1stan; 31.07.2015

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

person surenv2003    schedule 16.02.2011
comment
ответ не имеет смысла. - person Mitch Wheat; 11.09.2018