Partilhar via


DBCC CHECKIDENT (Transact-SQL)

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

Ícone de vínculo de tópicoConvenções de 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 para uma tabela for menor que o valor de identidade máximo armazenado na coluna de identidade, ele será redefinido usando o valor máximo na coluna de identidade. Consulte a seção Exceções a seguir.

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

Valor de identidade atual está 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, depois, 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, depois, 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. Para obter mais informações, consulte Criando e modificando colunas de identificador.

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

Estejam as opções para uma tabela que contém uma coluna de identidade especificadas ou não, DBCC CHECKIDENT retornará (valores podem variar):

Checking identity information: current identity value '290', current column value '290'. 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, quando necessário

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

USE AdventureWorks2008R2;
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 AddressType, no banco de dados AdventureWorks2008R2, mas não corrige o valor de identidade se estiver incorreto.

USE AdventureWorks2008R2;
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 valor da identidade atual mais 1, o valor de incremento atual definido para a coluna.

USE AdventureWorks2008R2;
GO
DBCC CHECKIDENT ("Person.AddressType", RESEED, 10);
GO