För att returnera en lista över alla opålitliga främmande nyckelbegränsningar i en SQL Server-databas kan du köra T-SQL-koden nedan.
En otillförlitlig främmande nyckel är en som har sin is_not_trusted
flaggan inställd på 1
.
Exempel 1 – Returnera endast obetrodda utländska nyckelbegränsningar
Den här frågan returnerar endast de opålitliga begränsningarna för främmande nyckel i den aktuella databasen. För det här exemplet returnerar jag bara namnet på begränsningen, dess betrodda status, tillsammans med dess aktiverade/inaktiverade 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 | +------------------------+------------------+---------------+
Detta frågar efter sys.foreign_keys
systemvy. Vi vet att det bara returnerar opålitliga begränsningar eftersom WHERE
sats anger endast rader som har is_not_trusted
kolumn inställd på 1
.
Om du bara vill returnera betrodd begränsningar för främmande nyckel, ändra helt enkelt 1
till 0
.
Jag har också inkluderat is_disabled
flagga, eftersom den visar oss om begränsningen för närvarande är aktiverad eller inte. Vi kan se att en av begränsningarna är aktiverad och den andra inte.
Detta visar det faktum att en begränsning kan vara obetrodd även när den är aktiverad. Detta beror på att när du aktiverar (eller skapar) en begränsning har du möjlighet att få den att kontrollera befintlig data innan den aktiveras. Om du väljer att inte kontrollera befintliga data förblir begränsningen opålitlig när den har aktiverats.
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_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 | +------------------------+------------+--------------------+---------------+------------------+
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 otillförlitliga):
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 | +--------------------------------+------------------+---------------+