Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So geben Sie alle nicht vertrauenswürdigen Fremdschlüsseleinschränkungen in SQL Server zurück (T-SQL-Beispiel)

Um eine Liste aller nicht vertrauenswürdigen Fremdschlüsseleinschränkungen in einer SQL Server-Datenbank zurückzugeben, können Sie den folgenden T-SQL-Code ausführen.

Ein nicht vertrauenswürdiger Fremdschlüssel ist einer, dessen is_not_trusted ist Flag auf 1 gesetzt .

Beispiel 1 – Nur nicht vertrauenswürdige Fremdschlüssel-Einschränkungen zurückgeben

Diese Abfrage gibt nur die nicht vertrauenswürdigen Fremdschlüsseleinschränkungen in der aktuellen Datenbank zurück. In diesem Beispiel gebe ich nur den Namen der Einschränkung, ihren vertrauenswürdigen Status sowie ihren aktivierten/deaktivierten Status zurück.

SELECT name AS 'Constraint', is_not_trusted, is_disabledFROM sys.foreign_keysWHERE is_not_trusted =1;

Ergebnis:

+------------------------+------------------+-- -------------+| Einschränkung | is_not_trusted | ist_deaktiviert ||------------------------+-----------------+--- ------------|| FK_BandMember_Band | 1 | 1 || FK_BandMitglied_Musiker | 1 | 0 |+---------------+-------------+--- -------------+

Dies fragt die sys.foreign_keys ab Systemansicht. Wir wissen, dass es nur nicht vertrauenswürdige Einschränkungen zurückgibt, weil WHERE -Klausel gibt nur Zeilen mit is_not_trusted an Spalte auf 1 gesetzt .

Wenn Sie nur vertrauenswürdig zurückkehren möchten Fremdschlüsseleinschränkungen ändern Sie einfach 1 auf 0 .

Ich habe auch den is_disabled eingefügt Flag, da es uns anzeigt, ob die Einschränkung derzeit aktiviert ist oder nicht. Wir können sehen, dass eine der Einschränkungen aktiviert ist und die andere nicht.

Dies zeigt die Tatsache, dass einer Einschränkung nicht vertraut werden kann, selbst wenn sie aktiviert ist. Dies liegt daran, dass Sie beim Aktivieren (oder Erstellen) einer Einschränkung die Möglichkeit haben, sie dazu zu bringen, alle vorhandenen Daten zu überprüfen, bevor sie aktiviert werden. Wenn Sie sich dafür entscheiden, vorhandene Daten nicht zu überprüfen, bleibt die Einschränkung nicht vertrauenswürdig, sobald sie aktiviert ist.

Hier ist noch einmal dieselbe Abfrage, aber dieses Mal füge ich die Tabelle und die referenzierte Tabelle für jede Einschränkung hinzu:

SELECT name AS 'Constraint', OBJECT_NAME(parent_object_id) AS 'Table', OBJECT_NAME(referenced_object_id) AS 'Referenced Table', is_disabled, is_not_trustedFROM sys.foreign_keysWHERE is_not_trusted =1;

Ergebnis:

+------------------------+------------+-------- -------------+---------------+------------------+| Einschränkung | Tabelle | Referenzierte Tabelle | ist_deaktiviert | is_not_trusted ||------------------------+------------+--------- -----------+---------------+------------------|| FK_BandMember_Band | Bandmitglied | Band | 1 | 1 || FK_BandMitglied_Musiker | Bandmitglied | Musiker | 0 | 1 |+----------------+------------+--------- -----------+---------------+------------------+

Beispiel 2 – Alle Fremdschlüsseleinschränkungen zurückgeben

Die folgende Abfrage gibt all zurück Fremdschlüsseleinschränkungen für die aktuelle Datenbank (nicht nur die nicht vertrauenswürdigen):

SELECT name AS 'Constraint', is_not_trusted, is_disabledFROM sys.foreign_keys;

Ergebnis:

+---------------------------+--------------------- -----+---------------+| Einschränkung | is_not_trusted | ist_deaktiviert ||--------------------------------+---------------------- ----+---------------|| FK_BandMember_Band | 1 | 1 || FK_BandMitglied_Musiker | 1 | 0 || FK_MembershipPeriod_BandMember | 0 | 0 |+-------------------------------+-------------- ----+---------------+