DBCC CHECKCONSTRAINTS (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instâ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 ]
]
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