DBCC CHECKIDENT (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics
Проверяет текущее значение удостоверения для указанной таблицы в SQL Server и при необходимости изменяет значение удостоверения. Можно также использовать DBCC CHECKIDENT
для ручного задания нового текущего значения удостоверения для столбца удостоверений.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис для SQL Server и Базы данных SQL Azure:
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
Синтаксис Для Azure Synapse Analytics:
DBCC CHECKIDENT
(
table_name
[ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
Аргументы
table_name
Имя таблицы, для которой необходимо проверить текущее значение удостоверения. Указанная таблица должна содержать столбец идентификаторов. Имена таблиц должны соответствовать правилам для идентификаторов. Необходимо разделить два или три названия частей, например Person.AddressType
или [Person].[AddressType]
.
NORESEED
Указывает, что текущее значение идентификатора не должно изменяться.
RESEED
Определяет, что текущее значение идентификатора должно изменяться.
new_reseed_value
Новое значение, используемое в качестве текущего значения столбца удостоверений.
WITH NO_INFOMSGS
Подавляет вывод всех информационных сообщений.
Замечания
Конкретные изменения, вносимые в текущее значение идентификатора, зависят от определений параметров.
команда DBCC CHECKIDENT | Изменение текущего значения идентификатора или идентификаторов |
---|---|
DBCC CHECKIDENT (<table_name>, NORESEED) |
Текущее значение идентификатора не сбрасывается. DBCC CHECKIDENT возвращает текущее значение удостоверения и текущее максимальное значение столбца удостоверений. Если эти два значения не равны друг другу, вам нужно сбросить значение идентификатора, чтобы избежать потенциальных ошибок или пропусков в последовательности значений. |
DBCC CHECKIDENT (<table_name>) or DBCC CHECKIDENT (<table_name>, RESEED) |
Если текущее значение идентификатора таблицы меньше, чем максимальное значение из содержащихся в столбце, оно устанавливается в максимальное значение в столбце идентификаторов. См. раздел "Исключения", приведенный ниже. |
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) |
Текущее значение удостоверения имеет new_reseed_value значение . Если строки не были вставлены в таблицу с момента создания таблицы или если все строки были удалены с помощью инструкции TRUNCATE TABLE, первая строка, вставленная после запуска DBCC CHECKIDENT, используется new_reseed_value в качестве удостоверения. Если строки присутствуют в таблице или все строки удалены с помощью инструкции DELETE, следующая строка, вставленная + 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>) .or Выполните выполнение 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
кроме одного. Эта операция указывает новое начальное значение.
Проверка сведений об удостоверениях: текущее значение удостоверения "<текущее значение> удостоверения", текущее значение столбца "<текущее значение> столбца". Выполнение инструкции DBCC завершено. Если инструкция DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
Если DBCC CHECKIDENT
используется для указания нового начального значения с помощью RESEED <new_reseed_value>
, возвращается следующее сообщение.
Проверка сведений об удостоверениях: текущее значение удостоверения "<текущее значение> удостоверения". Выполнение инструкции DBCC завершено. Если инструкция DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
Разрешения
Участник должен быть владельцем схемы, содержащей таблицу, либо участником предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.
Для Azure Synapse Analytics требуются разрешения db_owner.
Примеры
А. Сброс текущего значения удостоверения, если это необходимо.
В следующем примере сбрасывается текущее значение идентификатора (при необходимости) для указанной таблицы в базе данных AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Сообщите о текущем значении удостоверения
В следующем примере возвращается текущее значение идентификатора из указанной таблицы базы данных AdventureWorks2022
. Если значение идентификатора окажется неверным, оно не исправляется.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
В. Принудительно принудить текущее значение удостоверения к новому значению
Следующий пример принудительно устанавливает для идентификатора значение 10 в столбце AddressTypeID
для таблицы AddressType
. Так как таблица содержит существующие строки, следующая строка, вставленная, будет использовать 11 в качестве значения. Новое текущее значение удостоверения, определенное для столбца плюс 1 (которое является значением добавочного столбца).
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Сброс значения удостоверения в пустой таблице
В следующем примере предполагается удостоверение таблицы и принудительное значение текущего удостоверения (1, 1)
в ErrorLogID
столбце ErrorLog
таблицы равно 1 после удаления всех записей из таблицы. Поскольку в таблице нет существующих строк, следующая строка, вставленная строка будет использовать 1 в качестве значения, то есть новое текущее значение удостоверения без добавления значения добавочного значения, определенного для столбца после TRUNCATE, или добавления добавочного значения после DELETE.
USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO