VERIFICADOR DBCC (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados SQL do Azure Synapse Analyticsno Microsoft Fabric

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.

Este artigo e a sintaxe IDENTITY diferem em diferentes plataformas do SQL Database Engine. Para Microsoft Fabric Data Warehouse, selecione Fabric Data Warehouse na lista suspensa de versões.

Transact-SQL convenções de sintaxe

Sintaxe

Sintaxe para SQL Server, Base de Dados SQL do Azure, Azure SQL Managed Instance, SQL Database in Fabric:

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 que especifica deve conter uma coluna de identidade. Os nomes das tabelas devem 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 efetuam ao valor de identidade atual dependem das especificações dos parâmetros.

DBCC CHECKIDENT comando 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, reinicie o valor de identidade para evitar potenciais erros ou lacunas na sequência dos valores.
DBCC CHECKIDENT (<table_name>)

quer

DBCC CHECKIDENT (<table_name>, RESEED)
Se o valor de identidade atual de uma tabela for inferior ao valor máximo de identidade armazenado na coluna identidade, DBCC CHECKIDENT reinicia-o usando o valor máximo na coluna 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 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 as linhas estiverem presentes na tabela, ou se todas as linhas forem removidas usando a DELETE instrução, a linha seguinte inserida usa new_reseed_value + o valor de incremento atual . Se uma transação inserir uma linha e for posteriormente revertida, a linha seguinte inserida usa new_reseed_value + o valor atual do incremento como se a linha tivesse sido eliminada. 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 PRIMARY KEY restrição ou UNIQUE na coluna 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 KEYUNIQUE ou não existir, operações posteriores de inserção resultam em valores 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 seguinte reinicia o valor de identidade atual, se necessário, para a tabela especificada na base de dados.

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

B. Relatar o valor de identidade atual

O exemplo seguinte reporta o valor de identidade atual da tabela especificada na base de dados 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 seguinte força o valor de identidade atual da AddressTypeID coluna na AddressType tabela a um valor de 10. Como a tabela tem linhas já existentes, a linha seguinte 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 seguinte assume uma identidade de tabela e (1, 1) força o valor de identidade atual da ErrorLogID coluna na ErrorLog tabela para um valor de 1, após eliminar todos os registos da tabela. Como a tabela não tem linhas existentes, a linha seguinte 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 intervalos de identidade e evitar conflitos com futuros valores gerados automaticamente.

Este artigo e a sintaxe IDENTITY diferem em diferentes plataformas do SQL Database Engine.

Transact-SQL convenções de sintaxe

Sintaxe

DBCC CHECKIDENT ( 'table_name' [ , RESEED ] )

Argumentos

table_name

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

RESEED

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

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

Comentários

  • Em Fabric Data Warehouse, o único argumento que DBCC CHECKIDENT apoia é a RESEED opção, que ela executa sempre. O sistema determina automaticamente os intervalos corretos de valores de identidade seguintes com base nos dados existentes. Não podes especificar um valor de reseed personalizado.
  • Execute DBCC CHECKIDENT sempre depois de usar IDENTITY_INSERT para inserir valores explícitos. Esta operação assegura que os futuros valores gerados automaticamente não colidem com os valores inseridos manualmente.
  • No Fabric Data Warehouse, não é suportado especificar um personalizadonew_reseed_value. Tentar fornecer um valor retorna o seguinte erro: Specifying a custom seed in Fabric Data Warehouse is not supported.
  • DBCC CHECKIDENT adquire bloqueios que podem bloquear operações DML e DDL simultâneas. Para minimizar perturbações, execute o comando isoladamente quando outros processos não estiverem a usar ativamente a tabela.

Permissões

Deves ser dono da mesa ou ter ALTER permissão para a colocar.

Exemplos

Um. Reseed após inserir valores sentinela

Após preencher valores sentinela numa tabela de dimensões com SET IDENTITY_INSERT, re-seed 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

Depois de migrar dados históricos com valores de identidade explícitos, resemeie a tabela para garantir que as novas linhas recebem 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. Reseed 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-se a qualquer definiçã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 realiza sempre 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);