Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come restituire tutti i vincoli CHECK disabilitati in SQL Server (esempio T-SQL)

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.