Se hai bisogno di restituire un elenco di tutti i CHECK
vincoli che sono stati disabilitati in un database SQL Server, è possibile eseguire il codice T-SQL riportato di seguito.
Esempio 1 – Solo ritorno disabilitato CONTROLLA Vincoli
Questa query restituisce solo il CHECK
disabilitato vincoli nel database corrente. Restituisce il nome del vincolo, il nome della tabella a cui è applicato e la definizione del vincolo.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', definition FROM sys.check_constraints WHERE is_disabled = 1;
Risultato:
+----------------+-----------------+-------------------------------+ | Table | Constraint | definition | |----------------+-----------------+-------------------------------| | ConstraintTest | chkValidEndDate | ([EndDate]>=[StartDate]) | | Occupation | chkJobTitle | ([JobTitle]<>'Digital Nomad') | +----------------+-----------------+-------------------------------+
Questo interroga sys.check_constraints
vista del sistema. Sappiamo che restituisce solo vincoli disabilitati perché WHERE
La clausola specifica solo le righe che hanno il is_disabled
colonna impostata su 1
.
Se vuoi restituire tutti i abilitati CHECK
vincoli, cambia semplicemente il 1
a 0
.
Esempio 2 – Restituisci tutti i vincoli CHECK
La query seguente restituisce tutto CHECK
vincoli per il database corrente (non solo per quelli disabilitati). Questa volta restituisco is_disabled
colonna per dimostrare da dove la query precedente ha ottenuto il suo valore:
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', is_disabled, is_not_trusted FROM sys.check_constraints;
Risultato:
+----------------+-----------------+---------------+------------------+ | Table | Constraint | is_disabled | is_not_trusted | |----------------+-----------------+---------------+------------------| | ConstraintTest | chkPrice | 0 | 0 | | ConstraintTest | chkValidEndDate | 1 | 1 | | ConstraintTest | chkTeamSize | 0 | 0 | | Occupation | chkJobTitle | 1 | 1 | +----------------+-----------------+---------------+------------------+
Ho incluso anche is_not_trusted
colonna in questa query. È prudente essere consapevoli di questo valore, perché un vincolo può rimanere inaffidabile anche dopo che è stato riattivato. Per una discussione dettagliata (ed esempi) di questo flag, vedere Cosa dovresti sapere CON NOCHECK quando si abilita un vincolo CHECK in SQL Server.