DBCC CHECKCONSTRAINTS (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Inspeciona a integridade de uma restrição especificada ou de todas as restrições em uma tabela especificada no banco de dados atual.

Convenções de sintaxe Transact-SQL

Sintaxe

DBCC CHECKCONSTRAINTS
[
    (
    table_name | table_id | constraint_name | constraint_id
    )
]
    [ WITH
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
    [ , ] [ 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 | table_id | constraint_name | constraint_id

A tabela ou restrição que será verificada. Quando table_name ou table_id for especificado, todas as restrições habilitadas na tabela serão verificadas. Quando constraint_name ou constraint_id for especificado, somente essa restrição será verificada. Se um identificador de tabela ou um identificador de restrição não for especificado, todas as restrições habilitadas em todas as tabelas no banco de dados atual serão verificadas.

Um nome de restrição identifica exclusivamente a tabela à qual ela pertence. Para obter mais informações, consulte Database Identifiers.

WITH

Permite que opções sejam especificadas.

  • ALL_CONSTRAINTS

    Verifica todas as restrições habilitadas e desabilitadas na tabela se o nome da tabela for especificado ou se todas as tabelas forem verificadas. Caso contrário, verificará somente a restrição habilitada. ALL_CONSTRAINTS não tem nenhum efeito quando um nome de restrição é especificado.

  • ALL_ERRORMSGS

    Retorna todas as linhas que violam restrições na tabela verificada. O padrão inclui as primeiras 200 linhas.

  • NO_INFOMSGS

    Suprime todas as mensagens informativas.

Comentários

DBCC CHECKCONSTRAINTS constrói e executa uma consulta para todas as restrições FOREIGN KEY e CHECK de uma tabela.

Por exemplo, uma consulta de chave estrangeira tem o seguinte formato:

SELECT <columns>
FROM <table_being_checked> LEFT JOIN <referenced_table>
    ON <table_being_checked.fkey1> = <referenced_table.pkey1>
    AND <table_being_checked.fkey2> = <referenced_table.pkey2>
WHERE <table_being_checked.fkey1> IS NOT NULL
    AND <referenced_table.pkey1> IS NULL
    AND <table_being_checked.fkey2> IS NOT NULL
    AND <referenced_table.pkey2> IS NULL;

Os dados de consulta são armazenados em uma tabela temporária. Depois que todas as tabelas e restrições solicitadas forem verificadas, o conjunto de resultados será retornado.

DBCC CHECKCONSTRAINTS verifica a integridade das restrições FOREIGN KEY e CHECK, mas não verifica a integridade das estruturas de dados em disco de uma tabela. Essas verificações de estrutura de dados podem ser executadas usando DBCC CHECKDB e DBCC CHECKTABLE.

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores

Se table_name ou table_id for especificado e estiver habilitado para controle de versão do sistema, DBCC CHECKCONSTRAINTS também executará as verificações de consistência de dados temporais na tabela especificada. Quando NO_INFOMSGS não for especificado, esse comando retornará cada violação de consistência na saída em uma linha separada. O formato da saída será ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) E <what is wrong with temporal table record>.

Verificação Informações adicionais na saída se a verificação falhar
PeriodEndColumn >= PeriodStartColumn (atual) [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999'
PeriodEndColumn >= PeriodStartColumn (atual, histórico) [sys_start] = '{0}' AND [sys_end] = '{1}'
PeriodStartColumn < current_utc_time (current) [sys_start] = '{0}' AND SYSUTCTIME
PeriodEndColumn < current_utc_time (history) [sys_end] = '{0}' AND SYSUTCTIME
Sobreposições (sys_start1, sys_end1), (sys_start2, sys_end2) para dois registros sobrepostos.

Se houver mais de dois registros sobrepostos, a saída terá várias linhas e cada uma mostrará um par de sobreposições.

Você não pode especificar constraint_name ou constraint_id para executar apenas verificações de consistência temporal.

Conjuntos de resultados

DBCC CHECKCONSTRAINTS retorna um conjunto de linhas com as colunas a seguir.

Nome da coluna Tipo de dados Descrição
Nome da tabela varchar Nome da tabela.
Constraint Name varchar Nome da restrição que é violada.
Where varchar Atribuições de valor de coluna que identificam as linhas que violam a restrição.

O valor nesta coluna pode ser usado em uma cláusula WHERE de uma instrução SELECT que consulta as linhas que violam a restrição.

Não é garantido que DBCC CHECKCONSTRAINTS encontre todas as violações de restrição. Se uma única linha violar várias restrições, apenas a cláusula WHERE da primeira violação será listada. A menos que exista outra linha com a mesma combinação de valores que produz a violação e tenha essa violação como a primeira violação encontrada, a combinação de valores estará ausente do conjunto de resultados retornado. Talvez seja necessário executar DBCC CHECKCONSTRAINTS e corrigir problemas várias vezes antes de encontrar todas as violações de restrição no banco de dados.

Permissões

Exige associação à função de servidor fixa sysadmin ou à função de banco de dados fixa db_owner .

Exemplos

a. Verificar uma tabela

O exemplo a seguir verifica a integridade de restrição da tabela Table1 do banco de dados AdventureWorks2022.

USE AdventureWorks2022;
GO
CREATE TABLE Table1 (Col1 INT, Col2 CHAR(30));
GO
INSERT INTO Table1 VALUES (100, 'Hello');
GO
ALTER TABLE Table1 WITH NOCHECK ADD CONSTRAINT chkTab1 CHECK (Col1 > 100);
GO
DBCC CHECKCONSTRAINTS (Table1);
GO

B. Verificar uma restrição específica

O exemplo a seguir verifica a integridade da restrição CK_ProductCostHistory_EndDate.

USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO

C. Verificar todas as restrições habilitadas e desabilitadas em todas as tabelas

O exemplo a seguir verifica a integridade de todas as restrições habilitadas e desabilitadas em todas as tabelas do banco de dados atual.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Confira também