Om du behöver returnera en lista över alla främmande nyckelbegränsningar som har inaktiverats i en SQL Server-databas kan du köra T-SQL-koden nedan.
Exempel 1 – Returnera endast inaktiverade utländska nyckelbegränsningar
Denna fråga returnerar endast de inaktiverade främmande nyckelbegränsningarna i den aktuella databasen. I det här exemplet returnerar jag bara namnet på begränsningen, tillsammans med dess inaktiverade och betrodda 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 | +------------------------+---------------+------------------+
Detta frågar efter sys.foreign_keys
systemvy. Vi vet att det bara returnerar inaktiverade begränsningar eftersom WHERE
sats anger endast rader som har is_disabled
kolumn inställd på 1
.
Om du vill returnera endast aktiverad begränsningar för främmande nyckel, ändra helt enkelt 1
till 0
.
Observera att is_not_trusted
flaggan är också inställd på 1
för dessa funktionshindrade begränsningar. Det beror på att systemet inte kan garantera att begränsningen har kontrollerat all data. Detta är vettigt, eftersom att inaktivera en begränsning öppnar upp möjligheten för ogiltig data att komma in i databasen utan att kontrolleras.
Här är samma fråga igen, men den här gången inkluderar jag tabellen och den refererade tabellen för varje 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 | +------------------------+------------+--------------------+---------------+------------------+
Exempel 2 – Returnera alla utländska nyckelbegränsningar
Följande fråga returnerar alla främmande nyckelbegränsningar för den aktuella databasen (inte bara de inaktiverade):
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 | +--------------------------------+---------------+------------------+