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

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

Wenn Sie eine Liste aller Fremdschlüsseleinschränkungen zurückgeben müssen, die in einer SQL Server-Datenbank deaktiviert wurden, können Sie den folgenden T-SQL-Code ausführen.

Beispiel 1 – Nur deaktivierte Fremdschlüsseleinschränkungen zurückgeben

Diese Abfrage gibt nur die deaktivierten Fremdschlüsseleinschränkungen in der aktuellen Datenbank zurück. In diesem Beispiel gebe ich nur den Namen der Einschränkung zusammen mit ihrem deaktivierten und vertrauenswürdigen Status zurück.

SELECT name AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysWHERE is_disabled =1;

Ergebnis:

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

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

Wenn Sie nur aktiviert zurückgeben möchten Fremdschlüsseleinschränkungen ändern Sie einfach 1 auf 0 .

Beachten Sie, dass is_not_trusted ist Flag wird ebenfalls auf 1 gesetzt für diese behinderten Einschränkungen. Das liegt daran, dass das System nicht garantieren kann, dass die Einschränkung alle Daten geprüft hat. Dies ist sinnvoll, da das Deaktivieren einer Einschränkung die Möglichkeit eröffnet, dass ungültige Daten ungeprüft in die Datenbank gelangen.

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_disabled =1;

Ergebnis:

+------------------------+------------+-------- -------------+---------------+------------------+| Einschränkung | Tabelle | Referenzierte Tabelle | ist_deaktiviert | is_not_trusted ||------------------------+------------+--------- -----------+---------------+------------------|| FK_BandMember_Band | Bandmitglied | Band | 1 | 1 || FK_BandMitglied_Musiker | Bandmitglied | Musiker | 1 | 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 deaktivierten):

SELECT name AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keys;

Ergebnis:

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