Partilhar via


DBCC CHECKIDENT (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstâ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

Ver também