Als u een lijst wilt retourneren met alle beperkingen voor externe sleutels die zijn uitgeschakeld in een SQL Server-database, kunt u de onderstaande T-SQL-code uitvoeren.
Voorbeeld 1 – Uitgeschakelde externe sleutelbeperkingen alleen retourneren
Deze query retourneert alleen de uitgeschakelde externe-sleutelbeperkingen in de huidige database. Voor dit voorbeeld retourneer ik alleen de naam van de beperking, samen met de status uitgeschakeld en vertrouwd.
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Resultaat:
+------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | +------------------------+---------------+------------------+
Dit bevraagt de sys.foreign_keys
systeem bekijken. We weten dat het alleen uitgeschakelde beperkingen retourneert omdat de WHERE
clausule specificeert alleen rijen met de is_disabled
kolom ingesteld op 1
.
Als u alleen ingeschakeld wilt retourneren externe sleutelbeperkingen, verander gewoon de 1
naar 0
.
Merk op dat de is_not_trusted
vlag is ook ingesteld op 1
voor deze gehandicapte beperkingen. Dat komt omdat het systeem niet kan garanderen dat de beperking alle gegevens heeft gecontroleerd. Dit is logisch, omdat het uitschakelen van een beperking de kans vergroot dat ongeldige gegevens de database binnenkomen zonder te worden gecontroleerd.
Hier is dezelfde query opnieuw, maar deze keer neem ik de tabel en de tabel waarnaar wordt verwezen voor elke beperking:
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;
Resultaat:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 1 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Voorbeeld 2 – Alle beperkingen voor externe sleutels retourneren
De volgende zoekopdracht retourneert alle externe sleutelbeperkingen voor de huidige database (niet alleen de uitgeschakelde):
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys;
Resultaat:
+--------------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |--------------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+---------------+------------------+