DBCC CHECKIDENT (Transact-SQL)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse Analytics
Verifica o valor de identidade atual da tabela especificada no SQL Server 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 Transact-SQL
Sintaxe
Sintaxe do SQL Server e do Banco de Dados SQL do Azure:
DBCC CHECKIDENT
(
table_name
[ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
Sintaxe para 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. Duas ou três nomes de partes devem ser limitados, 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 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. 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 o valor como 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 baixo valor 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 novo valor de partida. |
Alterar o valor da 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.
Você não pode usar DBCC CHECKIDENT
para 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
retornará a mensagem a seguir para todas as operações, exceto uma. Essa operação está especificando um novo valor de semente.
Verificando informações de identidade: valor atual da identidade “<valor atual da identidade>”, valor atual da coluna “<valor atual da coluna>”. A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, contate o administrador do sistema.
Quando DBCC CHECKIDENT
é usado para especificar um novo valor de semente com RESEED <new_reseed_value>
, a mensagem a seguir é retornada.
Verificando informações de identidade: valor de identidade atual “<valor de identidade atual>”. A execução do DBCC foi concluída. Se o DBCC imprimiu mensagens de erro, contate o administrador do sistema.
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. Redefinir 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 AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Relatar o valor atual da identidade
O exemplo a seguir informa o valor de identidade atual na tabela especificada no banco de dados AdventureWorks2022
, e não corrige esse valor quando ele está incorreto.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Forçar o valor atual da identidade 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. O novo valor atual da identidade definido para a coluna mais 1 (que é o valor de incremento da coluna).
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Redefinir o valor de identidade em uma tabela vazia
O exemplo a seguir pressupõe uma identidade de tabela de (1, 1)
e força o valor atual da identidade na coluna ErrorLogID
da tabela ErrorLog
para um valor de 1, depois de 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 depois de TRUNCATE ou adicionar o valor de incremento depois de DELETE.
USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO