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