DBCC CHECKIDENT (Transact-SQL)
Aplica-se a:SQL Server (todas as versões com suporte)
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Verifica o valor de identidade atual da tabela especificada no SQL Server 2019 (15.x) 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.
Convenções de sintaxe do Transact-SQL
Sintaxe
-- Syntax for SQL Server and Azure SQL Database
DBCC CHECKIDENT
(
table_name
[, { NORESEED | { RESEED [, new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
-- Syntax for Azure Synapse Analytics
DBCC CHECKIDENT
(
table_name
[RESEED, new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
Observação
Para ver a sintaxe do Transact-SQL para o SQL Server 2014 e versões anteriores, confira a Documentação das versões anteriores.
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. Os nomes de tabela precisam seguir as regras para identificadores. Dois ou três nomes de parte devem ser delimitados, como 'Person.AddressType' ou [Person.AddressType].
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 atual da identidade é definido como o 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. 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. Se uma transação inserir uma linha e depois for revertida, a próxima linha inserida usará new_reseed_value + o valor do incremento atual como se a linha tivesse sido excluída. 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 não 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. Em seguida, 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 como um valor muito baixo e, em seguida, execute (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 como 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 as linhas existentes, é necessário remover 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. Essa operação está especificando 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 usando RESEED new_reseed_value, é retornada a mensagem a seguir.
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 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.
O Azure Synapse Analytics requer permissões db_owner.
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 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).
USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Redefinindo o valor de identidade em uma tabela vazia
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. 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.
USE AdventureWorks2012;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
Consulte Também
ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
IDENTITY (propriedade) (Transact-SQL)
Replicar colunas de identidade
USE (Transact-SQL)
IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)