Per restituire un elenco di tutti i vincoli di chiave esterna non attendibili in un database di SQL Server, è possibile eseguire il codice T-SQL riportato di seguito.
Una chiave esterna non attendibile è quella che ha il suo is_not_trusted
flag impostato su 1
.
Esempio 1 – Restituisci solo vincoli di chiave esterna non attendibili
Questa query restituisce solo i vincoli di chiave esterna non attendibili nel database corrente. Per questo esempio, restituisco solo il nome del vincolo, il suo stato attendibile, insieme allo stato abilitato/disabilitato.
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys WHERE is_not_trusted = 1;
Risultato:
+------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | +------------------------+------------------+---------------+
Questo interroga sys.foreign_keys
vista del sistema. Sappiamo che restituisce solo vincoli non attendibili perché WHERE
La clausola specifica solo le righe che hanno is_not_trusted
colonna impostata su 1
.
Se vuoi restituire solo fidato vincoli di chiave esterna, cambia semplicemente il 1
a 0
.
Ho incluso anche is_disabled
flag, perché ci mostra se il vincolo è attualmente abilitato o meno. Possiamo vedere che uno dei vincoli è abilitato e l'altro no.
Ciò dimostra il fatto che un vincolo può non essere attendibile anche quando è abilitato. Questo perché, quando abiliti (o crei) un vincolo, hai la possibilità di farlo controllare tutti i dati esistenti prima che sia abilitato. Se scegli di non controllare i dati esistenti, il vincolo rimarrà non attendibile una volta abilitato.
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_not_trusted = 1;
Risultato:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 0 | 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 quelli non attendibili):
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys;
Risultato:
+--------------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |--------------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+------------------+---------------+