DBCC CHECKIDENT (Transact-SQL)

Изменения: 17 ноября 2008 г.

Проверяет текущее значение идентификатора для указанной таблицы и при необходимости изменяет значение идентификатора. Также инструкцию 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 возвращает значения (которые могут изменяться):

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

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

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

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

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

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

Замечания

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

Команда 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 TABLE, то первая строка, вставляемая после запуска инструкции DBCC CHECKIDENT, будет использовать в качестве идентификатора значение new_reseed_value. Иначе следующая вставляемая строка будет использовать new_reseed_value + значение текущего приращения.

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

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

Исключения

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

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

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

  • Выполните команду 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.

Разрешения

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

Примеры

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

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

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee");
GO

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

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

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", NORESEED);
GO

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

В следующем примере текущему значению идентификатора в столбце EmployeeID в таблице Employee принудительно устанавливается значение 300. Так как таблица имеет существующие значения, следующая вставляемая строка будет использовать в качестве значения 301, то есть текущее значение идентификатора плюс 1, текущее значение приращения, определенное для столбца.

USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO

См. также

Справочник

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
IDENTITY (свойство) (Transact-SQL)
USE (Transact-SQL)

Другие ресурсы

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

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

17 ноября 2008 г.

Изменения
  • Исправлено определение new_reseed_value.
  • В раздел «Примечания» добавлено замечание об изменении начального значения.

14 апреля 2006 г.

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

5 декабря 2005 г.

Добавления
  • Добавлен текст с описанием аргумента new_reseed_value.