Aby zwrócić listę wszystkich niezaufanych ograniczeń kluczy obcych w bazie danych SQL Server, możesz uruchomić poniższy kod T-SQL.
Niezaufany klucz obcy to taki, który ma swój is_not_trusted
flaga ustawiona na 1
.
Przykład 1 – Zwróć tylko ograniczenia dotyczące niezaufanego klucza obcego
To zapytanie zwraca tylko niezaufane ograniczenia klucza obcego w bieżącej bazie danych. W tym przykładzie zwracam tylko nazwę ograniczenia, jego status zaufany oraz status włączony/wyłączony.
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys WHERE is_not_trusted = 1;
Wynik:
+------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | +------------------------+------------------+---------------+
To wysyła zapytanie do sys.foreign_keys
widok systemu. Wiemy, że zwraca tylko niezaufane ograniczenia, ponieważ WHERE
klauzula określa tylko wiersze, które mają is_not_trusted
kolumna ustawiona na 1
.
Jeśli chcesz zwrócić tylko zaufane ograniczenia klucza obcego, po prostu zmień 1
do 0
.
Dołączyłem również is_disabled
flaga, ponieważ pokazuje nam, czy ograniczenie jest aktualnie włączone, czy nie. Widzimy, że jedno z ograniczeń jest włączone, a drugie nie.
To pokazuje, że ograniczenie może być niezaufane, nawet jeśli jest włączone. Dzieje się tak, ponieważ po włączeniu (lub utworzeniu) ograniczenia masz możliwość sprawdzenia istniejących danych przed jego włączeniem. Jeśli zdecydujesz się nie sprawdzać istniejących danych, ograniczenie pozostanie niezaufane po włączeniu.
Oto znowu to samo zapytanie, ale tym razem dołączam tabelę i tabelę odniesienia dla każdego ograniczenia:
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;
Wynik:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 0 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Przykład 2 – Zwróć wszystkie ograniczenia klucza obcego
Następujące zapytanie zwraca wszystkie ograniczenia klucza obcego dla bieżącej bazy danych (nie tylko niezaufanych):
SELECT name AS 'Constraint', is_not_trusted, is_disabled FROM sys.foreign_keys;
Wynik:
+--------------------------------+------------------+---------------+ | Constraint | is_not_trusted | is_disabled | |--------------------------------+------------------+---------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 0 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+------------------+---------------+