Partilhar via


DBCC CHECKCONSTRAINTS (Transact-SQL)

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

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

Transact-SQL convenções de sintaxe

Sintaxe

DBCC CHECKCONSTRAINTS
[
    (
    table_name | table_id | constraint_name | constraint_id
    )
]
    [ WITH
    [ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
    [ , ] [ NO_INFOMSGS ]
    ]

Argumentos

table_name | table_id | constraint_name | constraint_id

A tabela ou restrição a ser verificada. Quando table_name ou table_id é especificado, todas as restrições habilitadas nessa tabela são marcadas. Quando constraint_name ou constraint_id é especificado, apenas essa restrição é 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 pertence. Para obter mais informações, consulte Database Identifiers.

COM

Permite que as opções sejam especificadas.

  • ALL_CONSTRAINTS

    Verifica todas as restrições ativadas e desativadas na tabela se o nome da tabela for especificado ou se todas as tabelas estiverem marcadas; caso contrário, verifica apenas a restrição habilitada. ALL_CONSTRAINTS não tem efeito quando um nome de restrição é especificado.

  • ALL_ERRORMSGS

    Retorna todas as linhas que violam restrições na tabela marcada. O padrão são 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 em uma tabela.

Por exemplo, uma consulta de chave estrangeira tem a seguinte forma:

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 ou restrições solicitadas tiverem sido 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 realizadas usando DBCC CHECKDB e DBCC CHECKTABLE.

Aplica-se ao: 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á 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>.

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

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

Não é possível especificar constraint_name ou constraint_id para executar apenas verificações de consistência temporal.

Conjuntos de resultados

DBCC CHECKCONSTRAINTS retornar um conjunto de linhas com as seguintes colunas.

Nome da coluna Tipo de dados Descrição
Nome da tabela varchar Nome da tabela.
Nome da restrição varchar Nome da restrição violada.
Em que varchar Atribuições de valor de coluna que identificam a linha ou linhas que violam a restrição.

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

Não é garantido que DBCC CHECKCONSTRAINTS encontre todas as violações de restrições. Se uma única linha violar várias restrições, apenas a cláusula WHERE para a 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

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

Exemplos

Um. Verificar uma tabela

O exemplo a seguir verifica a integridade da restrição da tabela Table1 no 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. Verifique todas as restrições ativadas e desativadas em todas as tabelas

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

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Ver também