DBCC CHECKIDENT (Transact-SQL)

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Синтаксические обозначения в 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 '<current identity value>', current column value '<current column value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

При использовании инструкции DBCC CHECKIDENT для указания нового начального значения с помощью RESEED new_reseed_value возвращается следующее сообщение.

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

Разрешения

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

Примеры

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

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

USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

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

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

USE AdventureWorks2012; 
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED); 
GO

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

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

USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

См. также

Справочник

ALTER TABLE (Transact-SQL)

CREATE TABLE (SQL Server)

DBCC (Transact-SQL)

IDENTITY (свойство) (Transact-SQL)

USE (Transact-SQL)

IDENT_SEED (Transact-SQL)

IDENT_INCR (Transact-SQL)

Основные понятия

Репликация столбцов идентификаторов