Поделиться через


DBCC CHECKIDENT (Transact-SQL)

Проверяет текущее значение идентификатора для указанной таблицы в среде SQL Server 2008 R2 и при необходимости изменяет значение идентификатора. Также инструкцию DBCC CHECKIDENT можно использовать для ручной установки нового текущего значения идентификатора для столбца идентификаторов.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

DBCC CHECKIDENT 
 ( 
    table_name
        [, { NORESEED | { RESEED [,new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

Аргументы

  • table_name
    Это имя таблицы, для которой выполняется проверка текущего значения идентификатора. Указанная таблица должна содержать столбец идентификаторов. Имена таблиц должны соответствовать требованиям для идентификаторов.

  • NORESEED
    Определяет, что текущее значение идентификатора не должно изменяться.

  • RESEED
    Определяет, что текущее значение идентификатора должно изменяться.

  • new_reseed_value
    Новое значение, предназначенное для использования в качестве текущего значения для столбца идентификаторов.

  • WITH NO_INFOMSGS
    Подавляет все информационные сообщения.

Замечания

Конкретные изменения, вносимые в текущее значение идентификатора, зависят от определений параметров.

команда DBCC CHECKIDENT

Изменение текущего значения идентификатора или идентификаторов

DBCC CHECKIDENT ( table_name, NORESEED )

Текущее значение идентификатора не сбрасывается. Инструкция DBCC CHECKIDENT возвращает текущее значение идентификатора и текущее максимальное значение столбца идентификаторов. Если эти два значения не равны друг другу, необходимо сбросить значение идентификатора, чтобы избежать потенциальных ошибок или пропусков в последовательности значений.

DBCC CHECKIDENT ( table_name)

или

DBCC CHECKIDENT ( table_name, RESEED )

Если текущее значение идентификатора таблицы меньше, чем максимальное значение из содержащихся в столбце, оно устанавливается в максимальное значение в столбце идентификаторов. См. следующий раздел «Исключения».

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

Текущее значение идентификатора устанавливается равным new_reseed_value. Если со времени создания таблицы в нее не вставлялись строки или все строки были удалены с помощью инструкции TRUNCATE TABL, первая строка, вставляемая после запуска инструкции DBCC CHECKIDENT, будет использовать значение new_reseed_value в качестве идентификатора. Иначе следующая вставляемая строка будет использовать new_reseed_value + значение текущего приращения.

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

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

  • Если ограничений PRIMARY KEY или UNIQUE не существует, последующие операции вставки приведут к дублированию значений идентификаторов.

Исключения

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

Условие

Способы сброса

Текущее значение идентификатора больше максимального значения в таблице.

  • Выполните команду DBCC CHECKIDENT (table_name, NORESEED), чтобы определить текущее максимальное значение в столбце, а затем укажите его в качестве аргумента new_reseed_value в команде DBCC CHECKIDENT (table_name, RESEED,new_reseed_value).

или

  • Выполните команду DBCC CHECKIDENT (table_name, RESEED,new_reseed_value), при этом для аргумента new_reseed_value установите очень маленькое значение, а затем выполните команду DBCC CHECKIDENT (table_name, RESEED), чтобы исправить это значение.

Из таблицы удалены все строки.

Выполните команду DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) с нужным начальным значением, присвоенным аргументу new_reseed_value.

Изменение начального значения

Начальное значение представляет собой значение, вставляемое в столбец идентификаторов для самой первой строки, загружаемой в таблицу. Все последующие строки содержат текущее значение идентификатора, увеличенное на значение приращения, где текущее значение идентификатора представляет собой последнее значение идентификатора, сформированное для таблицы или представления. Дополнительные сведения см. в разделе Создание и изменение столбцов идентификаторов.

Инструкцию DBCC CHECKIDENT нельзя использовать для выполнения следующих задач.

  • Изменение исходного начального значения, которое было указано для столбца идентификаторов при создании таблицы или представления.

  • Повторное указание начального значения для существующих строк в таблице или представлении.

Чтобы изменить исходное начальное значение и повторно задать начальное значение для каких-либо существующих строк, необходимо удалить столбец идентификаторов и создать его повторно, указав новое начальное значение. Если таблица содержит данные, то номера идентификаторов добавляются к существующим строкам с учетом указанного начального значения и приращения. Порядок, в котором выполняется обновление строк, не гарантирован.

Результирующие наборы

В зависимости от того, указаны ли какие-либо параметры для таблицы, содержащей столбец идентификаторов, инструкция DBCC CHECKIDENT возвращает значения (которые могут изменяться):

Checking identity information: current identity value '290', current column value '290'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Разрешения

Участник должен быть владельцем таблицы, членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.

Примеры

А. Сброс текущего значения идентификатора при необходимости

Следующий пример при необходимости сбрасывает текущее значение идентификатора для таблицы AddressType в базе данных База данных AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType");
GO

Б. Сообщение текущего значения идентификатора

Следующий пример сообщает текущее значение идентификатора в таблице AddressType базы данных База данных AdventureWorks2008R2, при этом не исправляя значение идентификатора, если оно окажется неверным.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", NORESEED);
GO

В. Принудительная установка нового значения текущему значению идентификатора

Следующий пример принудительно устанавливает для идентификатора значение 10 в столбце AddressTypeID для таблицы AddressType. Так как в таблице уже есть строки, следующая вставляемая строка будет использовать в качестве значения 11, то есть текущее значение идентификатора плюс 1, текущее значение приращения, определенное для столбца.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", RESEED, 10);
GO