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

Confira também