Hvis du har brug for at returnere en liste over alle fremmednøglebegrænsninger, der er blevet deaktiveret i en SQL Server-database, kan du køre T-SQL-koden nedenfor.
Eksempel 1 – Returner kun deaktiverede udenlandske nøglebegrænsninger
Denne forespørgsel returnerer kun de deaktiverede fremmednøglebegrænsninger i den aktuelle database. For dette eksempel returnerer jeg kun navnet på begrænsningen sammen med dens deaktiverede og betroede status.
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Resultat:
+------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | +------------------------+---------------+------------------+
Dette forespørger sys.foreign_keys
systemvisning. Vi ved, at det kun returnerer deaktiverede begrænsninger, fordi WHERE
klausul specificerer kun rækker, der har is_disabled
kolonne sat til 1
.
Hvis du kun vil returnere aktiveret fremmednøglebegrænsninger, skal du blot ændre 1
til 0
.
Bemærk, at is_not_trusted
flag er også sat til 1
for disse handicappede begrænsninger. Det skyldes, at systemet ikke kan garantere, at begrænsningen har kontrolleret alle data. Dette giver mening, fordi deaktivering af en begrænsning åbner muligheden for, at ugyldige data kan komme ind i databasen uden at blive kontrolleret.
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_disabled = 1;
Resultat:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 1 | 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 deaktiverede):
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys;
Resultat:
+--------------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |--------------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+---------------+------------------+