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

APLICA-SE A: simSQL Server (a partir do 2008) simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

Verifica o valor de identidade atual da tabela especificada no SQL Server 2017SQL Server 2017 e, se necessário, altera o valor da identidade.Checks the current identity value for the specified table in SQL Server 2017SQL Server 2017 and, if it's needed, changes the identity value. Você também pode usar DBCC CHECKIDENT para definir manualmente um novo valor de identidade atual para a coluna de identidade.You can also use DBCC CHECKIDENT to manually set a new current identity value for the identity column.

Ícone de link do artigo Convenções de sintaxe do Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxeSyntax

  
DBCC CHECKIDENT   
 (   
    table_name  
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  
)  
[ WITH NO_INFOMSGS ]  

ArgumentosArguments

table_nametable_name
É o nome da tabela sobre a qual verificar o valor de identidade atual.Is the name of the table for which to check the current identity value. A tabela especificada deve conter uma coluna de identidade.The table specified must contain an identity column. Os nomes de tabela precisam seguir as regras para identificadores.Table names must follow the rules for identifiers. Dois ou três nomes de parte devem ser delimitados, como 'Person.AddressType' ou [Person.AddressType].Two or three part names must be delimited, such as 'Person.AddressType' or [Person.AddressType].

NORESEEDNORESEED
Especifica que o valor de identidade atual não deve ser alterado.Specifies that the current identity value shouldn't be changed.

RESEEDRESEED
Especifica que o valor de identidade atual deve ser alterado.Specifies that the current identity value should be changed.

new_reseed_valuenew_reseed_value
O novo valor a ser usado como o valor atual da coluna de identidade.Is the new value to use as the current value of the identity column.

WITH NO_INFOMSGSWITH NO_INFOMSGS
Suprime todas as mensagens informativas.Suppresses all informational messages.

RemarksRemarks

As correções específicas feitas no valor de identidade atual dependem das especificações de parâmetro.The specific corrections made to the current identity value depend on the parameter specifications.

Comando DBCC CHECKIDENTDBCC CHECKIDENT command Correção de Identidade ou correções feitasIdentity correction or corrections made
DBCC CHECKIDENT ( table_name, NORESEED )DBCC CHECKIDENT ( table_name, NORESEED ) Valor de identidade atual não é redefinido.Current identity value is not reset. DBCC CHECKIDENT retorna o valor de identidade atual e o valor máximo atual da coluna de identidade.DBCC CHECKIDENT returns the current identity value and the current maximum value of the identity column. Se os dois valores não coincidirem, redefina o valor de identidade para evitar erros em potencial ou intervalos na sequência de valores.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 )

ou emor

DBCC CHECKIDENT ( table_name, RESEED )DBCC CHECKIDENT ( table_name, RESEED )
Se o valor de identidade atual de uma tabela for menor que o valor de identidade máximo armazenado na coluna de identidade, ele será redefinido por meio do valor máximo na coluna de identidade.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. Consulte a seção de 'Exceções' a seguir.See the 'Exceptions' section that follows.
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) O valor atual da identidade é definido como o new_reseed_value.Current identity value is set to the new_reseed_value. Se nenhuma linha for inserida na tabela desde sua criação, ou se todas as linhas forem removidas usando a instrução TRUNCATE TABLE, a primeira linha inserida após a execução de DBCC CHECKIDENT usará new_reseed_value como a identidade.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.

Se houver linhas na tabela ou se todas as linhas foram removidas usando a instrução DELETE, a próxima linha inserida usará new_reseed_value + o valor do incremento atual.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.

Se a tabela não estiver vazia, definir o valor de identidade em um número menor que o valor máximo na coluna de identidade poderá resultar em uma das seguintes condições: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:

Caso exista uma restrição PRIMARY KEY ou UNIQUE na coluna de identidade, a mensagem de erro 2627 será gerada em operações de inserção posteriores na tabela, porque o valor de identidade gerado estará em conflito com os valores existentes.-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.

–Caso não exista uma restrição PRIMARY KEY ou UNIQUE, operações de inserção posteriores resultarão em valores de identidade duplicados.-If a PRIMARY KEY or UNIQUE constraint does not exist, later insert operations will result in duplicate identity values.

ExceçõesExceptions

A tabela a seguir lista condições quando DBCC CHECKIDENT não redefine o valor de identidade atual automaticamente e oferece métodos para redefini-lo.The following table lists conditions when DBCC CHECKIDENT doesn't automatically reset the current identity value, and provides methods for resetting the value.

CondiçãoCondition Métodos de redefiniçãoReset methods
O valor de identidade atual é maior do que o valor máximo na tabela.The current identity value is larger than the maximum value in the table. Execute DBCC CHECKIDENT (table_name, NORESEED) para determinar o valor máximo atual na coluna.Execute DBCC CHECKIDENT (table_name, NORESEED) to determine the current maximum value in the column. Em seguida, especifique esse valor como o new_reseed_value em um comando 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.

-ou--OR-

Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) com new_reseed_value definido como um valor muito baixo e, em seguida, execute (table_name, RESEED) para corrigir o valor.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.
Todas as linhas são excluídas da tabela.All rows are deleted from the table. Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) com new_reseed_value definido como o valor inicial desejado.Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to the new starting value.

Alterando o valor de sementeChanging the Seed Value

O valor de semente é o valor inserido em uma coluna de identidade na primeira linha carregada na tabela.The seed value is the value inserted into an identity column for the first row loaded into the table. Todas as linhas subsequentes contêm o valor de identidade atual além do valor de incremento, em que o valor de identidade atual é o último valor de identidade gerado para a tabela ou exibição.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.

Não é possível usar DBCC CHECKIDENT para executar as seguintes tarefas:You can't use DBCC CHECKIDENT for the following tasks:

  • Alterar o valor de semente original que foi especificado para uma coluna de identidade quando a tabela ou exibição foram criadas.Change the original seed value specified for an identity column when the table or view was created.

  • Propagar novamente linhas existentes em uma tabela ou exibição.Reseed existing rows in a table or view.

Para alterar o valor de semente original e propagar novamente as linhas existentes, é necessário remover a coluna de identidade e recriá-la especificando o novo valor de semente.To change the original seed value and reseed any existing rows, drop the identity column and recreate it specifying the new seed value. Quando a tabela contém dados, os números de identidade são adicionados às linhas existentes com os valores de semente e de incremento especificados.When the table contains data, the identity numbers are added to the existing rows with the specified seed and increment values. A ordem em que as linhas são atualizadas não é garantida.The order in which the rows are updated isn't guaranteed.

Conjuntos de resultadosResult Sets

Quer uma das opções seja especificada ou não para uma tabela que contém uma coluna de identidade, DBCC CHECKIDENT retorna a mensagem a seguir para todas as operações, exceto durante a especificação de um novo valor de semente.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. Essa operação está especificando um novo valor de semente.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.

Quando DBCC CHECKIDENT é usado para especificar um novo valor de semente usando RESEED new_reseed_value, é retornada a mensagem a seguir.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.

PermissõesPermissions

O chamador deve ter o esquema que contém a tabela, ou ser um membro da função de servidor fixa sysadmin, a função de banco de dados fixa db_owner ou a função de banco de dados fixa 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.

ExemplosExamples

A.A. Redefinindo o valor de identidade atual, se necessárioResetting the current identity value, if it's needed

O exemplo a seguir redefine o valor de identidade atual, quando necessário, da tabela especificada no banco de dados 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.B. Relatando o valor de identidade atualReporting the current identity value

O exemplo a seguir informa o valor de identidade atual na tabela especificada no banco de dados AdventureWorks2012AdventureWorks2012, e não corrige esse valor quando ele está incorreto.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.C. Forçando o valor de identidade atual para um novo valorForcing the current identity value to a new value

O exemplo a seguir força o valor de identidade atual na coluna AddressTypeID na tabela AddressType para um valor de 10.The following example forces the current identity value in the AddressTypeID column in the AddressType table to a value of 10. Como a tabela tem linhas existentes, a próxima linha inserida usará 11 como o valor, isto é, o valor da identidade atual definido para a coluna mais 1 (que é o valor de incremento da coluna).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.D. Redefinindo o valor de identidade em uma tabela vaziaResetting the identity value on an empty table

O exemplo a seguir força o valor de identidade atual na coluna ErrorLogID na tabela ErrorLog para um valor de 1 após excluir todos os registros da tabela.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. Como a tabela não tem linhas existentes, a próxima linha inserida usará 1 como o valor, isto é, o novo valor de identidade atual, sem adicionar o valor de incremento definido para a coluna.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  
  

Consulte TambémSee Also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
IDENTITY (Propriedade) (Transact-SQL)IDENTITY (Property) (Transact-SQL)
Replicar colunas de identidadeReplicate Identity Columns
USE (Transact-SQL)USE (Transact-SQL)
IDENT_SEED (Transact-SQL)IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)IDENT_INCR (Transact-SQL)