Se è necessario restituire un elenco di tutti i vincoli di chiave esterna che sono stati disabilitati in un database di SQL Server, è possibile eseguire il codice T-SQL riportato di seguito.
Esempio 1 – Restituisce solo vincoli di chiave esterna disabilitati
Questa query restituisce solo i vincoli di chiave esterna disabilitati nel database corrente. Per questo esempio, restituisco solo il nome del vincolo, insieme al suo stato disabilitato e attendibile.
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Risultato:
+------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | +------------------------+---------------+------------------+
Questo interroga sys.foreign_keys
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 solo abilitati vincoli di chiave esterna, cambia semplicemente il 1
a 0
.
Nota che il is_not_trusted
flag è anche impostato su 1
per questi vincoli disabilitati. Questo perché il sistema non può garantire che il vincolo abbia verificato tutti i dati. Questo ha senso, perché la disabilitazione di un vincolo apre la possibilità che dati non validi entrino nel database senza essere controllati.
Ecco di nuovo la stessa query, ma questa volta includo la tabella e la tabella di riferimento per ogni vincolo:
SELECT name AS 'Constraint', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Risultato:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 1 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Esempio 2 – Restituisci tutti i vincoli di chiave esterna
La query seguente restituisce tutto vincoli di chiave esterna per il database corrente (non solo per quelli disabilitati):
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys;
Risultato:
+--------------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |--------------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+---------------+------------------+