Jeśli chcesz zwrócić listę wszystkich ograniczeń kluczy obcych, które zostały wyłączone w bazie danych SQL Server, możesz uruchomić poniższy kod T-SQL.
Przykład 1 – Wyłączone ograniczenia klucza obcego tylko do zwrotu
To zapytanie zwraca tylko wyłączone ograniczenia klucza obcego w bieżącej bazie danych. W tym przykładzie zwracam tylko nazwę ograniczenia wraz z jego statusem wyłączonego i zaufanego.
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Wynik:
+------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | +------------------------+---------------+------------------+
To wysyła zapytanie do sys.foreign_keys
widok systemu. Wiemy, że zwraca tylko wyłączone ograniczenia, ponieważ WHERE
klauzula określa tylko wiersze, które mają is_disabled
kolumna ustawiona na 1
.
Jeśli chcesz zwrócić tylko włączone ograniczenia klucza obcego, po prostu zmień 1
do 0
.
Zwróć uwagę, że is_not_trusted
flaga jest również ustawiona na 1
dla tych niepełnosprawnych ograniczeń. Dzieje się tak, ponieważ system nie może zagwarantować, że ograniczenie sprawdziło wszystkie dane. Ma to sens, ponieważ wyłączenie ograniczenia otwiera możliwość wprowadzenia nieprawidłowych danych do bazy danych bez sprawdzania.
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_disabled = 1;
Wynik:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 1 | 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 tych wyłączonych):
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys;
Wynik:
+--------------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |--------------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+---------------+------------------+