Als u een lijst met alle niet-vertrouwde beperkingen voor externe sleutels in een SQL Server-database wilt retourneren, kunt u de onderstaande T-SQL-code uitvoeren.
Een niet-vertrouwde externe sleutel is een sleutel met zijn is_not_trusted
vlag ingesteld op 1
.
Voorbeeld 1 – Alleen niet-vertrouwde beperkingen voor buitenlandse sleutels retourneren
Deze query retourneert alleen de niet-vertrouwde externe-sleutelbeperkingen in de huidige database. Voor dit voorbeeld retourneer ik alleen de naam van de beperking, de vertrouwde status, samen met de ingeschakelde/uitgeschakelde status.
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys WHERE is_not_trusted = 1;
Resultaat:
+------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | +------------------------+------------------+---------------+
Dit bevraagt de sys.foreign_keys
systeem bekijken. We weten dat het alleen niet-vertrouwde beperkingen retourneert omdat de WHERE
clausule specificeert alleen rijen die de is_not_trusted
. hebben kolom ingesteld op 1
.
Als u alleen vertrouwd wilt retourneren externe sleutelbeperkingen, verander gewoon de 1
naar 0
.
Ik heb ook de is_disabled
. toegevoegd vlag, omdat het ons laat zien of de beperking momenteel is ingeschakeld of niet. We kunnen zien dat een van de beperkingen is ingeschakeld en de andere niet.
Dit toont aan dat een beperking niet kan worden vertrouwd, zelfs als deze is ingeschakeld. Dit komt omdat, wanneer u een beperking inschakelt (of maakt), u de mogelijkheid hebt om deze bestaande gegevens te laten controleren voordat deze wordt ingeschakeld. Als u ervoor kiest om bestaande gegevens niet te controleren, blijft de beperking niet vertrouwd zodra deze is ingeschakeld.
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_not_trusted = 1;
Resultaat:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 0 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Voorbeeld 2 – Alle beperkingen voor externe sleutels retourneren
De volgende zoekopdracht retourneert alle externe sleutelbeperkingen voor de huidige database (niet alleen de niet-vertrouwde):
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys;
Resultaat:
+--------------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |--------------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+------------------+---------------+