VERIFICADOR DE DBCC (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsBanco de Dados SQL no Microsoft Fabric

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.

Este artigo e a IDENTITY sintaxe diferem entre diferentes plataformas do SQL Mecanismo de Banco de Dados. Para Microsoft Fabric Data Warehouse, selecione Fabric Data Warehouse na lista suspensa de versões.

Convenções de sintaxe Transact-SQL

Sintaxe

Sintaxe para SQL Server, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, SQL Database em Fabric:

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 ]

Argumentos

table_name

O nome da tabela sobre a qual verificar o valor de identidade atual. A tabela que você especifica deve conter uma coluna identidade. Os nomes de tabela precisam seguir as regras para identificadores. Use delimitadores para 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 que DBCC CHECKIDENT elas fazem ao valor de identidade atual dependem das especificações dos parâmetros.

DBCC CHECKIDENT comando 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 forem iguais, resete o valor identidade para evitar possíveis erros ou lacunas na sequência dos 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 máximo de identidade armazenado na coluna de identidade, DBCC CHECKIDENT ele é resetado usando o 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 for inserida na tabela desde que a tabela foi criada, ou se todas as linhas forem removidas usando a TRUNCATE TABLE instrução, a primeira linha inserida após a execução DBCC CHECKIDENT é usada new_reseed_value como identidade. Se linhas estiverem presentes na tabela, ou se todas forem removidas usando a DELETE instrução, a próxima linha inserida usa new_reseed_value + o valor de incremento atual . Se uma transação insere uma linha e depois é revertida, a próxima linha inserida usa new_reseed_value + o valor atual do incremento 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:

- Se existir uma PRIMARY KEY restrição ou UNIQUE na coluna de identidade, a mensagem de erro 2627 é gerada em operações posteriores de inserção na tabela porque o valor de identidade gerado entra em conflito com valores existentes.

- Se a restrição a PRIMARY KEY ou UNIQUE não existir, operações posteriores de inserção resultam 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, se necessário, para a tabela especificada no banco de dados.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

B. Relatar o valor atual da identidade

O exemplo a seguir reporta o valor de identidade atual da tabela especificada no banco de dados e não corrige o valor de identidade se ele estiver 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 da AddressTypeID coluna na AddressType tabela para um valor de 10. Como a tabela tem linhas já existentes, a próxima linha inserida usa 11 como valor. O novo valor de identidade atual definido para a coluna mais 1 é 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 e (1, 1) força o valor de identidade atual da ErrorLogID coluna ErrorLog na tabela a um valor de 1, após excluir todos os registros da tabela. Como a tabela não possui linhas existentes, a próxima linha inserida usa 1 como valor. O novo valor de identidade corrente 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

Aplica-se a:Warehouse no Microsoft Fabric

Resemeia o valor identidade de uma tabela em Fabric Data Warehouse. Use DBCC CHECKIDENT após inserir valores explícitos com SET IDENTITY_INSERT para realinhar os intervalos de identidade e evitar conflitos com valores gerados automaticamente no futuro.

Este artigo e a IDENTITY sintaxe diferem entre diferentes plataformas do SQL Mecanismo de Banco de Dados.

Convenções de sintaxe Transact-SQL

Sintaxe

DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )

Argumentos

table_name

O nome da tabela para a qual o valor de identidade deve ser reseed. A tabela deve conter uma coluna de identidade. Nomes de tabelas podem incluir o nome do esquema, como 'dbo.DimCustomer' ou '[dbo].[DimCustomer]'.

RESEED

A RESEED palavra-chave é opcional, mas DBCC CHECKIDENT sempre executa a operação de reseed. Incluir ou omitir a opção produz os mesmos resultados.

A RESEED palavra-chave instrui o Mecanismo de Banco de Dados a escanear todos os intervalos de identidade usados e reservados e definir o próximo valor de identidade para evitar conflitos com valores existentes. Em Fabric Data Warehouse, RESEED realiza uma varredura consciente de alcance em todos os nós de computação distribuídos para determinar o próximo valor correto.

Comentários

  • Em Fabric Data Warehouse, o único argumento que DBCC CHECKIDENT apoia é a RESEED opção, que ela sempre executa. O sistema determina automaticamente os próximos intervalos corretos de valores de identidade com base nos dados existentes. Você não pode especificar um valor de reseed personalizado.
  • Sempre execute DBCC CHECKIDENT depois de usar IDENTITY_INSERT para inserir valores explícitos. Essa operação garante que os valores gerados automaticamente no futuro não colidam com valores inseridos manualmente.
  • Em Fabric Data Warehouse, especificar um customizado new_reseed_value não é suportado. Tentar fornecer um valor retorna o seguinte erro: Specifying a custom seed in Fabric Data Warehouse is not supported.
  • DBCC CHECKIDENT adquire locks que podem bloquear operações simultâneas de DML e DDL. Para minimizar interrupções, execute o comando isoladamente quando outros processos não estiverem usando ativamente a tabela.

Permissões

Você deve ser dono da mesa ou ter ALTER permissão para a mesa.

Exemplos

a. Reseed após inserir valores sentinela

Após preencher valores sentinela em uma tabela de dimensões com SET IDENTITY_INSERT, reseed a coluna identidade para evitar que futuros valores gerados automaticamente colidam com valores inseridos manualmente.

-- Insert sentinel values
SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName)
VALUES (-1, 'Unknown'),
       (-2, 'Not Applicable');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

-- Reseed to realign future identity values
DBCC CHECKIDENT('dbo.DimCustomer', RESEED);

B. Resemeadura após migração em massa

Após migrar dados históricos com valores de identidade explícitos, re-seed a tabela para garantir que novas linhas recebam valores que não se sobreponham aos dados migrados.

-- After migrating data with IDENTITY_INSERT
DBCC CHECKIDENT('dbo.DimProduct', RESEED);

-- Future inserts receive auto-generated values beyond the migrated range
INSERT INTO dbo.DimProduct (ProductName, Category)
VALUES ('New Widget', 'Hardware');

C. Resemeia após COPY INTO com IDENTITY_INSERT

Após carregar dados com COPY INTO enquanto IDENTITY_INSERT é ON, reseed a coluna identidade. COPY INTO As opções sobrepõem qualquer configuração de nível de sessão para IDENTITY_INSERT.

COPY INTO dbo.DimStore (StoreKey 1, StoreName 2, Region 3)
FROM 'https://storage.blob.core.windows.net/migration/dimstore.csv'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

-- Reseed after bulk load
DBCC CHECKIDENT('dbo.DimStore', RESEED);

D. Reseed sem a palavra-chave RESEED

A RESEED palavra-chave é opcional, mas DBCC CHECKIDENT sempre executa a operação de reseed. Incluir ou omitir a opção produz os mesmos resultados.

-- Reseed without the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore');

-- Reseed with the RESEED keyword
DBCC CHECKIDENT('dbo.DimStore', RESEED);