DBCC CHECKIDENT (Transact-SQL)
Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure 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 ]
Примечание
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
table_name
Имя таблицы, для которой проверка текущее значение удостоверения. Указанная таблица должна содержать столбец идентификаторов. Имена таблиц должны соответствовать правилам для идентификаторов. Имена двух или трех частей должны быть разделены, например Person.AddressType
или [Person].[AddressType]
.
NORESEED
Указывает, что текущее значение идентификатора не должно изменяться.
RESEED
Определяет, что текущее значение идентификатора должно изменяться.
new_reseed_value
Новое значение, используемое в качестве текущего значения столбца идентификаторов.
WITH NO_INFOMSGS
Подавляет вывод всех информационных сообщений.
Remarks
Конкретные изменения, вносимые в текущее значение идентификатора, зависят от определений параметров.
команда 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 в качестве удостоверения. Если строки присутствуют в таблице или все строки были удалены с помощью инструкции DELETE, в следующей вставленной строке используется 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
кроме одной. Эта операция указывает новое начальное значение.
Проверка сведений об удостоверениях: текущее значение удостоверения "<текущее значение> удостоверения", значение текущего столбца "<текущее значение> столбца". Выполнение инструкции DBCC завершено. Если инструкция DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
Если DBCC CHECKIDENT
используется для указания нового начального значения с помощью RESEED <new_reseed_value>
, возвращается следующее сообщение.
Проверка сведений об удостоверениях: текущее значение удостоверения "<текущее значение> удостоверения". Выполнение инструкции DBCC завершено. Если инструкция DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
Разрешения
Участник должен быть владельцем схемы, содержащей таблицу, либо участником предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.
Для Azure Synapse Analytics требуются разрешения db_owner.
Примеры
A. Сброс текущего значения удостоверения, если это необходимо
В следующем примере сбрасывается текущее значение идентификатора (при необходимости) для указанной таблицы в базе данных AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
Б. Сообщить о текущем значении удостоверения
В следующем примере возвращается текущее значение идентификатора из указанной таблицы базы данных 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
Г. Сброс значения идентификатора в пустой таблице
В следующем примере предполагается, что идентификатор (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