Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instâ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