DBCC CHECKIDENT (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
do Azure Synapse Analytics
Verifica o valor de identidade atual para a tabela especificada no SQL Server 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.
Transact-SQL convenções de sintaxe
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 do Azure Synapse Analytics:
DBCC CHECKIDENT
(
table_name
[ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]
Argumentos
table_name
O nome da tabela para a qual verificar o valor de identidade atual. A tabela especificada deve conter uma coluna de identidade. Os nomes das tabelas devem seguir as regras para identificadores. Devem ser delimitados nomes de duas ou três partes, 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.
COM NO_INFOMSGS
Suprime todas as mensagens informativas.
Comentários
As correções específicas feitas ao valor de identidade atual dependem das especificações dos parâmetros.
Comando DBCC CHECKIDENT | Correção de identidade ou correções efetuadas |
---|---|
DBCC CHECKIDENT (<table_name>, NORESEED) |
O 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 forem iguais, você deve redefinir o valor de identidade para evitar possíveis erros ou lacunas na sequência de valores. |
DBCC CHECKIDENT (<table_name>) quer DBCC CHECKIDENT (<table_name>, RESEED) |
Se o valor de identidade atual de uma tabela for menor que o valor máximo de identidade armazenado na coluna de identidade, ele será redefinido usando o valor máximo na coluna de identidade. Consulte a secção Exceções que se segue. |
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) |
O valor de identidade atual é definido como o new_reseed_value . Se nenhuma linha tiver sido inserida na tabela desde que a tabela foi criada, ou se todas as linhas tiverem sido removidas usando a instrução TRUNCATE TABLE, a primeira linha inserida depois de executar DBCC CHECKIDENT usará new_reseed_value como identidade. Se as linhas estiverem presentes na tabela, ou se todas as linhas tiverem sido removidas usando a instrução DELETE, a próxima linha inserida usará new_reseed_value + o valor de de incremento atual. Se uma transação insere uma linha e é revertida posteriormente, a próxima linha inserida usa new_reseed_value + o valor de de incremento atual como se a linha tivesse sido excluída. Se a tabela não estiver vazia, definir o valor de identidade para um número menor do que o valor máximo na coluna de identidade pode resultar em uma das seguintes condições:- Se existir uma restrição de CHAVE PRIMÁRIA ou EXCLUSIVA 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 entrará em conflito com os valores existentes. - Se não existir uma restrição de CHAVE PRIMÁRIA ou ÚNICA, as operações de inserção posteriores resultarão em valores de identidade duplicados. |
Exceções
A tabela a seguir lista as condições em que DBCC CHECKIDENT
não redefine automaticamente o valor de identidade atual e fornece métodos para redefinir o valor.
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>) .quer Execute DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) com new_reseed_value definido como um valor baixo e, em seguida, 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 inicial. |
Alterar o valor da semente
O valor seed é o valor inserido em uma coluna de identidade para a primeira linha carregada na tabela. Todas as linhas subsequentes contêm o valor de identidade atual mais o 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 o DBCC CHECKIDENT
para as seguintes tarefas:
Altere o valor de semente original especificado para uma coluna de identidade quando a tabela ou exibição foi criada.
Resemear linhas existentes em uma tabela ou exibição.
Para alterar o valor de semente original e resemear quaisquer linhas existentes, solte a coluna de identidade e recrie-a 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 incremento especificados. A ordem em que as linhas são atualizadas não é garantida.
Conjuntos de resultados
Se você especificar ou não opções para uma tabela que contém uma coluna de identidade, DBCC CHECKIDENT
retorna a seguinte mensagem para todas as operações, exceto uma. Essa operação está especificando um novo valor semente.
Verificação de informações de identidade: valor de identidade atual '<valor de identidade atual>', valor de coluna atual '<valor de coluna atual>'. Execução do DBCC concluída. Se DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema.
Quando DBCC CHECKIDENT
é usado para especificar um novo valor de semente usando RESEED <new_reseed_value>
, a seguinte mensagem é retornada.
Verificação de informações de identidade: valor de identidade atual '<valor de identidade atual>'. Execução do DBCC concluída. Se DBCC imprimiu mensagens de erro, entre em contato com o administrador do sistema.
Permissões
O chamador deve possuir o esquema que contém a tabela ou ser membro do sysadmin função de servidor fixa, 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 de db_owner.
Exemplos
Um. Redefinir o valor de identidade atual, se necessário
O exemplo a seguir redefine o valor de identidade atual, se necessário, da tabela especificada no banco de dados AdventureWorks2022
.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Relatar o valor de identidade atual
O exemplo a seguir relata o valor de identidade atual na tabela especificada no banco de dados AdventureWorks2022
e não corrige o valor de identidade se estiver incorreto.
USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Forçar 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. O novo valor de identidade atual 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 assume uma identidade de tabela de (1, 1)
e força o valor de identidade atual na coluna ErrorLogID
na 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, ou seja, o novo valor de identidade atual sem adicionar o valor de incremento definido para a coluna após TRUNCATE, ou adicionar o valor de incremento após 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