Condividi tramite


DBCC CHECKCONSTRAINTS (Transact-SQL)

Si applica a: SQL Server Azure SQL DatabaseIstanza gestita di SQL di Azure

Controlla l'integrità di un vincolo specificato oppure di tutti i vincoli di una tabella specificata nel database corrente.

Convenzioni della sintassi Transact-SQL

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

table_name | table_id | constraint_name | constraint_id

Tabella o vincolo da controllare. Se si specifica table_name o table_id vengono controllati tutti i vincoli abilitati nella tabella. Se si specifica constraint_name o constraint_id viene controllato solo il vincolo specificato. Se non viene specificato un identificatore di tabella o un identificatore di vincolo, vengono controllati tutti i vincoli abilitati per tutte le tabelle del database corrente.

Un nome di vincolo identifica in modo univoco la tabella a cui appartiene. Per altre informazioni, vedere Identificatori del database.

WITH

Consente di specificare opzioni.

  • ALL_CONSTRAINTS

    Controlla tutti i vincoli abilitati e disabilitati della tabella se viene specificato il nome della tabella o se vengono controllate tutte le tabelle. In caso contrario, viene controllato solo il vincolo abilitato. ALL_CONSTRAINTS non ha alcun effetto quando viene specificato un nome di vincolo.

  • ALL_ERRORMSGS

    Restituisce tutte le righe che violano i vincoli della tabella controllata. Per impostazione predefinita vengono restituite le prime 200 righe.

  • NO_INFOMSGS

    Disattiva tutti i messaggi informativi.

Osservazioni

DBCC CHECKCONSTRAINTS costruisce ed esegue una query per tutti i vincoli FOREIGN KEY e CHECK in una tabella.

Una query di chiave esterna, ad esempio, presenta il seguente 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;

I dati della query vengono archiviati in una tabella temporanea. Dopo che tutte le tabelle o tutti i vincoli richiesti sono stati controllati, viene restituito il set di risultati.

DBCC CHECKCONSTRAINTS controlla l'integrità dei vincoli FOREIGN KEY e CHECK, ma non controlla l'integrità delle strutture di dati su disco di una tabella. Il controllo di queste strutture può essere eseguito tramite DBCC CHECKDB e DBCC CHECKTABLE.

Si applica a: SQL Server 2016 (13.x) e versioni successive

Se viene specificato table_name o table_id ed è abilitato per il controllo delle versioni del sistema, DBCC CHECKCONSTRAINTS esegue anche controlli di coerenza dei dati temporali nella tabella specificata. Quando non viene specificato NO_INFOMSGS , questo comando restituirà ogni violazione di coerenza nell'output in una riga separata. Il formato dell'output sarà ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...) AND <what is wrong with temporal table record>.

Controllo Informazioni aggiuntive nell'output in caso di verifica non riuscita
PeriodEndColumn >= PeriodStartColumn (current) [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999'
PeriodEndColumn >= PeriodStartColumn (current, history) [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
Sovrapposizioni (sys_start1, sys_end1), (sys_start2, sys_end2) per due record sovrapposti.

Se sono presenti più di due record sovrapposti, l'output avrà più righe ognuna con una coppia di sovrapposizioni.

Non è possibile specificare constraint_name o constraint_id per eseguire solo controlli di coerenza temporale.

Set di risultati

DBCC CHECKCONSTRAINTS restituisce un set di righe con le colonne seguenti.

Nome colonna Tipo di dati Descrizione
Nome tabella varchar Nome della tabella.
Constraint Name varchar Nome del vincolo violato.
Where varchar Assegnazioni di valori di colonna che identificano una o più righe che violano il vincolo.

È possibile utilizzare il valore di questa colonna in una clausola WHERE di un'istruzione SELECT che esegue una query per individuare le righe che violano il vincolo.

DBCC CHECKCONSTRAINTS non è garantito trovare tutte le violazioni dei vincoli. Se una singola riga viola più vincoli, viene elencata solo la WHERE clausola per la prima violazione. A meno che non esista un'altra riga con la stessa combinazione di valori che producono la violazione e che abbia tale violazione come prima violazione trovata, la combinazione di valori non sarà presente nel set di risultati restituito. Potrebbe essere necessario eseguire DBCC CHECKCONSTRAINTS e risolvere i problemi più volte prima di trovare tutte le violazioni dei vincoli nel database.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner .

Esempi

R. Controllare una tabella

Nell'esempio seguente viene controllata l'integrità dei vincoli della tabella Table1 del database 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. Controllare un vincolo specifico

Nell'esempio seguente viene controllata l'integrità del vincolo CK_ProductCostHistory_EndDate.

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

C. Controllare tutti i vincoli abilitati e disabilitati in tutte le tabelle

Nell'esempio seguente viene controllata l'integrità di tutti i vincoli abilitati e disabilitati di tutte le tabelle nel database corrente.

DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO

Vedi anche