DBCC CHECKIDENT (Transact-SQL)DBCC CHECKIDENT (Transact-SQL)

Область применения: ДаSQL Server ДаБаза данных SQL Azure ДаAzure Synapse Analytics (Хранилище данных SQL) НетParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

Проверяет текущее значение идентификатора для указанной таблицы в SQL Server 2019 (15.x)SQL Server 2019 (15.x) и при необходимости изменяет его.Checks the current identity value for the specified table in SQL Server 2019 (15.x)SQL Server 2019 (15.x) and, if it's needed, changes the identity value. Также инструкцию DBCC CHECKIDENT можно использовать для ручной установки нового текущего значения идентификатора для столбца идентификаторов.You can also use DBCC CHECKIDENT to manually set a new current identity value for the identity column.

Значок ссылки на статью Синтаксические обозначения в Transact-SQLArticle link icon Transact-SQL Syntax Conventions

СинтаксисSyntax


-- Syntax for SQL Server and Azure SQL Database  

DBCC CHECKIDENT
 (
    table_name  
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  
)  
[ WITH NO_INFOMSGS ]  
-- Syntax for Azure SQL Data Warehouse
DBCC CHECKIDENT   
 (   
    table_name  
        [RESEED, new_reseed_value ]   
)  
[ WITH NO_INFOMSGS ]  

АргументыArguments

table_nametable_name
Это имя таблицы, для которой выполняется проверка текущего значения идентификатора.Is the name of the table for which to check the current identity value. Указанная таблица должна содержать столбец идентификаторов.The table specified must contain an identity column. Имена таблиц должны соответствовать правилам для идентификаторов.Table names must follow the rules for identifiers. Имена из двух или трех частей должны содержать разделители, например "<Человек>.<Тип_адреса>" или [<Человек>.<Тип_адреса>].Two or three part names must be delimited, such as 'Person.AddressType' or [Person.AddressType].

NORESEEDNORESEED
Указывает, что текущее значение идентификатора не должно изменяться.Specifies that the current identity value shouldn't be changed.

RESEEDRESEED
Определяет, что текущее значение идентификатора должно изменяться.Specifies that the current identity value should be changed.

new_reseed_valuenew_reseed_value
Новое значение, предназначенное для использования в качестве текущего значения для столбца идентификаторов.Is the new value to use as the current value of the identity column.

WITH NO_INFOMSGSWITH NO_INFOMSGS
Подавляет вывод всех информационных сообщений.Suppresses all informational messages.

RemarksRemarks

Конкретные изменения, вносимые в текущее значение идентификатора, зависят от определений параметров.The specific corrections made to the current identity value depend on the parameter specifications.

команда DBCC CHECKIDENTDBCC CHECKIDENT command Изменение текущего значения идентификатора или идентификаторовIdentity correction or corrections made
DBCC CHECKIDENT (table_name, NORESEED)DBCC CHECKIDENT ( table_name, NORESEED ) Текущее значение идентификатора не сбрасывается.Current identity value is not reset. Инструкция DBCC CHECKIDENT возвращает текущее значение идентификатора и текущее максимальное значение столбца идентификаторов.DBCC CHECKIDENT returns the current identity value and the current maximum value of the identity column. Если эти два значения не равны друг другу, необходимо сбросить значение идентификатора, чтобы избежать потенциальных ошибок или пропусков в последовательности значений.If the two values are not the same, you should reset the identity value to avoid potential errors or gaps in the sequence of values.
DBCC CHECKIDENT (table_name)DBCC CHECKIDENT ( table_name )

или диспетчер конфигурации службor

DBCC CHECKIDENT (table_name, RESEED)DBCC CHECKIDENT ( table_name, RESEED )
Если текущее значение идентификатора таблицы меньше, чем максимальное значение из содержащихся в столбце, оно устанавливается в максимальное значение в столбце идентификаторов.If the current identity value for a table is less than the maximum identity value stored in the identity column, it is reset using the maximum value in the identity column. См. раздел «Исключения» далее.See the 'Exceptions' section that follows.
DBCC CHECKIDENT (table_name, RESEED, new_reseed_value)DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) В качестве текущего значения идентификатора задается new_reseed_value.Current identity value is set to the new_reseed_value. Если со времени создания таблицы в нее не вставлялись строки или все строки были удалены с помощью инструкции TRUNCATE TABL, то первая строка, вставляемая после запуска инструкции DBCC CHECKIDENT, будет использовать значение new_reseed_value в качестве идентификатора.If no rows have been inserted into the table since the table was created, or if all rows have been removed by using the TRUNCATE TABLE statement, the first row inserted after you run DBCC CHECKIDENT uses new_reseed_value as the identity. Если в таблице есть строки или если все строки были удалены с помощью инструкции DELETE, следующая строка вставляется со значением new_reseed_value и текущим шагом приращения.If rows are present in the table, or if all rows have been removed by using the DELETE statement, the next row inserted uses new_reseed_value + the current increment value. Если транзакция вставляет строку и впоследствии подверглась откату, то следующая вставленная строка использует new_reseed_value + текущий шаг значение так, как если бы строка была удалена.If a transaction inserts a row and is later rolled back, the next row inserted uses new_reseed_value + the current increment value as if the row had been deleted. Если таблица не пустая, установка значения идентификатора меньше, чем максимальное значение столбца идентификаторов может привести к одному из следующих условий.If the table is not empty, setting the identity value to a number less than the maximum value in the identity column can result in one of the following conditions:

— Если в столбце идентификаторов существуют ограничения PRIMARY KEY или UNIQUE, при выполнении последующих операций вставки в таблицу будет сформировано сообщение об ошибке 2627, потому что созданное значение идентификатора будет конфликтовать с существующими значениями.-If a PRIMARY KEY or UNIQUE constraint exists on the identity column, error message 2627 will be generated on later insert operations into the table because the generated identity value will conflict with existing values.

— Если ограничения PRIMARY KEY или UNIQUE отсутствуют, последующие операции вставки приведут к дублированию значений идентификаторов.-If a PRIMARY KEY or UNIQUE constraint does not exist, later insert operations will result in duplicate identity values.

ИсключенияExceptions

В следующей таблице перечислены условия, при которых инструкция DBCC CHECKIDENT не будет выполнять автоматический сброс текущего значения идентификатора, а также представлены способы сброса значения.The following table lists conditions when DBCC CHECKIDENT doesn't automatically reset the current identity value, and provides methods for resetting the value.

УсловиеCondition Способы сбросаReset methods
Текущее значение идентификатора больше максимального значения в таблице.The current identity value is larger than the maximum value in the table. Выполните инструкцию DBCC CHECKIDENT (table_name, NORESEED) чтобы определить текущее максимальное значение в столбце.Execute DBCC CHECKIDENT (table_name, NORESEED) to determine the current maximum value in the column. Затем укажите это значение как new_reseed_value для команды DBCC CHECKIDENT (table_name, RESEED,new_reseed_value).Next, specify that value as the new_reseed_value in a DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) command.

-или--OR-

Выполните инструкцию DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) с очень низким значением new_reseed_value, а затем выполните инструкцию DBCC CHECKIDENT (table_name, RESEED), чтобы исправить значение.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to a very low value, and then run DBCC CHECKIDENT (table_name, RESEED) to correct the value.
Из таблицы удалены все строки.All rows are deleted from the table. Выполните инструкцию DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) с новым начальным значением new_reseed_value.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to the new starting value.

Изменение начального значенияChanging the Seed Value

Начальное значение представляет собой значение, вставляемое в столбец идентификаторов для первой строки, загружаемой в таблицу.The seed value is the value inserted into an identity column for the first row loaded into the table. Все последующие строки содержат текущее значение идентификатора, увеличенное на значение приращения, где текущее значение идентификатора представляет собой последнее значение идентификатора, сформированное для таблицы или представления.All subsequent rows contain the current identity value plus the increment value where current identity value is the last identity value generated for the table or view.

Инструкцию DBCC CHECKIDENT нельзя использовать для следующих задач:You can't use DBCC CHECKIDENT for the following tasks:

  • Изменение исходного начального значения, которое было указано для столбца идентификаторов при создании таблицы или представления.Change the original seed value specified for an identity column when the table or view was created.

  • Повторное указание начального значения для существующих строк в таблице или представлении.Reseed existing rows in a table or view.

Чтобы изменить исходное начальное значение и повторно задать начальное значение для каких-либо существующих строк, удалите столбец идентификаторов и создайте его повторно, указав новое начальное значение.To change the original seed value and reseed any existing rows, drop the identity column and recreate it specifying the new seed value. Если таблица содержит данные, то номера идентификаторов добавляются к существующим строкам с учетом указанного начального значения и приращения.When the table contains data, the identity numbers are added to the existing rows with the specified seed and increment values. Порядок, в котором выполняется обновление строк, не гарантирован.The order in which the rows are updated isn't guaranteed.

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

В зависимости от того, указали ли вы какие-либо параметры для таблицы, содержащей столбец идентификаторов, инструкция DBCC CHECKIDENT возвращает следующее сообщение для всех операций за исключением одной.Whether or not you specify any options for a table that contains an identity column, DBCC CHECKIDENT returns the following message for all operations except one. Эта операция указывает новое начальное значение.That operation is specifying a new seed value.

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 возвращается следующее сообщение.When DBCC CHECKIDENT is used to specify a new seed value by using RESEED new_reseed_value, the following message is returned.

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

РазрешенияPermissions

Участник должен быть владельцем схемы, содержащей таблицу, либо участником предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.Caller must own the schema that contains the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

Хранилище данных SQL Azure требует разрешения db_owner.Azure SQL Data Warehouse requires db_owner permissions.

ПримерыExamples

A.A. Сброс текущего значения идентификатора при необходимостиResetting the current identity value, if it's needed

В следующем примере сбрасывается текущее значение идентификатора (при необходимости) для указанной таблицы в базе данных AdventureWorks2012AdventureWorks2012.The following example resets the current identity value, if it's needed, of the specified table in the AdventureWorks2012AdventureWorks2012 database.

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

Б.B. Выдача текущего значения идентификатораReporting the current identity value

В следующем примере возвращается текущее значение идентификатора из указанной таблицы базы данных AdventureWorks2012AdventureWorks2012. Если значение идентификатора окажется неверным, оно не исправляется.The following example reports the current identity value in the specified table in the AdventureWorks2012AdventureWorks2012 database, and doesn't correct the identity value if it's incorrect.

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

В.C. Принудительная установка нового значения текущему значению идентификатораForcing the current identity value to a new value

Следующий пример принудительно устанавливает для идентификатора значение 10 в столбце AddressTypeID для таблицы AddressType.The following example forces the current identity value in the AddressTypeID column in the AddressType table to a value of 10. Так как в таблице уже есть строки, в следующей вставляемой строке будет использоваться значение 11, то есть новое текущее значение идентификатора, определенное для столбца, плюс 1 (шаг приращения столбца).Because the table has existing rows, the next row inserted will use 11 as the value – the new current identity value defined for the column plus 1 (which is the column's increment value).

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

Г.D. Сброс значения идентификатора в пустой таблицеResetting the identity value on an empty table

Следующий пример принудительно задает текущее значение 1 для идентификатора в столбце ErrorLogID таблицы ErrorLog после удаления всех записей из таблицы.The following example forces the current identity value in the ErrorLogID column in the ErrorLog table to a value of 1, after deleting all records from table. Так как в таблице нет существующих строк, следующая вставляемая строка будет использовать в качестве значения 1, то есть новое текущее значение идентификатора, не добавляя приращение, заданное для столбца.Because the table has no existing rows, the next row inserted will use 1 as the value, that is, the new current identity value, without adding the increment value defined for the column.

USE AdventureWorks2012;  
GO  
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);  
GO  

См. также:See Also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
Свойство IDENTITY (Transact-SQL)IDENTITY (Property) (Transact-SQL)
Репликация столбцов идентификаторовReplicate Identity Columns
USE (Transact-SQL)USE (Transact-SQL)
IDENT_SEED (Transact-SQL)IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)IDENT_INCR (Transact-SQL)