DBCC CHECKIDENT (Transact-SQL)

Verifica o valor de identidade atual da tabela especificada no SQL Server 2014 e, se necessário, altera o valor da identidade. Você também pode usar DBCC CHECKIDENT para definir manualmente um novo valor de identidade atual para a coluna de identidade.

Aplica-se a: SQL Server (SQL Server 2008 à versão atual).

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • table_name
    É o nome da tabela sobre a qual verificar o valor de identidade atual. A tabela especificada deve conter uma coluna de identidade. Nomes de tabelas devem ser compatíveis com as regras para identificadores.

  • NORESEED
    Especifica que o valor de identidade atual não deve ser alterado.

  • RESEED
    Especifica que o valor de identidade atual deve ser alterado.

  • new_reseed_value
    O novo valor a ser usado como o valor atual da coluna de identidade.

  • WITH NO_INFOMSGS
    Suprime todas as mensagens informativas.

Comentários

As correções específicas feitas no valor de identidade atual dependem das especificações de parâmetro.

Comando DBCC CHECKIDENT

Correção de Identidade ou correções feitas

DBCC CHECKIDENT ( table_name, NORESEED )

Valor de identidade atual não é redefinido. DBCC CHECKIDENT retorna o valor de identidade atual e o valor máximo atual da coluna de identidade. Se os dois valores não coincidirem, redefina o valor de identidade para evitar erros em potencial ou intervalos na sequência de valores.

DBCC CHECKIDENT ( table_name)

ou

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. Consulte a seção de 'Exceções' a seguir.

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

O valor da identidade atual é definido em new_reseed_value. Se nenhuma linha foi inserida na tabela desde sua criação, ou se todas as linhas foram 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. Caso contrário, a próxima linha inserida usará new_reseed_value + o valor incremento atual.

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:

  • 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.

  • Caso exista uma restrição PRIMARY KEY ou UNIQUE, operações de inserção posteriores resultarão em valores de identidade duplicados.

Exceções

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.

Condição

Métodos de redefinição

O valor de identidade atual é maior do que o valor máximo na tabela.

  • Execute DBCC CHECKIDENT (table_name, NORESEED) para determinar o valor máximo atual na coluna e especifique esse valor como o new_reseed_value em um comando DBCC CHECKIDENT (table_name, RESEED, new_reseed_value).

ou

  • Execute DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) com new_reseed_value definido para um valor muito baixo e execute DBCC CHECKIDENT (table_name, RESEED) para corrigir o valor.

Todas as linhas são excluídas da tabela.

Execute DBCC CHECKIDENT (table_name, RESEED, new_reseed_value) com new_reseed_value definido para o valor inicial desejado.

Alterando o valor de semente

O valor de semente é o valor inserido em uma coluna de identidade na primeira linha carregada na tabela. 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.

Não é possível usar DBCC CHECKIDENT para executar as seguintes tarefas:

  • Alterar o valor de semente original que foi especificado para uma coluna de identidade quando a tabela ou exibição foram criadas.

  • Propagar novamente linhas existentes em uma tabela ou exibição.

Para alterar o valor de semente original e propagar novamente todas as linhas existentes, é necessário descartar a coluna de identidade e recriá-la especificando o novo valor de semente. 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. A ordem em que as linhas são atualizadas não é garantida.

Conjuntos de resultados

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.

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 com RESEED new_reseed_value, a mensagem a seguir é retornada.

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

Permissões

O chamador deve ter a tabela ou ser membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa db_ddladmin.

Exemplos

A.Redefinindo o valor de identidade atual, se necessário

O exemplo a seguir redefine o valor de identidade atual, quando necessário, da tabela especificada no banco de dados AdventureWorks2012 .

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

B.Relatando o valor de identidade atual

O exemplo a seguir informa o valor de identidade atual na tabela especificada no banco de dados AdventureWorks2012 , e não corrige esse valor quando ele está incorreto.

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

C.Forçando o valor de identidade atual para um novo valor

O exemplo a seguir força o valor de identidade atual na coluna AddressTypeID na tabela AddressType para um valor de 10. Como a tabela tem as linhas existentes, a próxima linha inserida usará 11 como o valor, isto é, o novo valor de incremento atual definido para o valor da coluna mais 1.

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

Consulte também

Referência

ALTER TABLE (Transact-SQL)

CREATE TABLE (SQL Server)

DBCC (Transact-SQL)

IDENTITY (propriedade) (Transact-SQL)

USE (Transact-SQL)

IDENT_SEED (Transact-SQL)

IDENT_INCR (Transact-SQL)

Conceitos

Replicar colunas de identidade