For at returnere en liste over alle upålidelige fremmednøglebegrænsninger i en SQL Server-database kan du køre T-SQL-koden nedenfor.
En fremmednøgle, der ikke er tillid til, er en, der har sin is_not_trusted
flag sat til 1
.
Eksempel 1 – Returner kun upålidelige udenlandske nøglebegrænsninger
Denne forespørgsel returnerer kun de ubetroede fremmednøglebegrænsninger i den aktuelle database. For dette eksempel returnerer jeg kun navnet på begrænsningen, dens betroede status sammen med dens aktiverede/deaktiverede status.
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys WHERE is_not_trusted = 1;
Resultat:
+------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | +------------------------+------------------+---------------+
Dette forespørger sys.foreign_keys
systemvisning. Vi ved, at det kun returnerer upålidelige begrænsninger, fordi WHERE
klausul specificerer kun rækker, der har is_not_trusted
kolonne sat til 1
.
Hvis du kun vil returnere betroet fremmednøglebegrænsninger, skal du blot ændre 1
til 0
.
Jeg har også inkluderet is_disabled
flag, fordi det viser os, om begrænsningen i øjeblikket er aktiveret eller ej. Vi kan se, at en af begrænsningerne er aktiveret og den anden ikke.
Dette viser det faktum, at en begrænsning kan være ubetroet, selv når den er aktiveret. Dette skyldes, at når du aktiverer (eller opretter) en begrænsning, har du mulighed for at få den til at kontrollere eksisterende data, før den aktiveres. Hvis du vælger ikke at kontrollere eksisterende data, vil begrænsningen forblive upålidelig, når den er aktiveret.
Her er den samme forespørgsel igen, men denne gang inkluderer jeg tabellen og den refererede tabel for hver begrænsning:
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;
Resultat:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 0 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Eksempel 2 – Returner alle begrænsninger for fremmednøgle
Følgende forespørgsel returnerer alle fremmednøglebegrænsninger for den aktuelle database (ikke kun de ikke-pålidelige):
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys;
Resultat:
+--------------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |--------------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+------------------+---------------+