Pokud potřebujete vrátit seznam všech omezení cizích klíčů, která byla deaktivována v databázi SQL Server, můžete spustit kód T-SQL níže.
Příklad 1 – Vrátit pouze deaktivovaná omezení cizího klíče
Tento dotaz vrátí pouze zakázaná omezení cizího klíče v aktuální databázi. V tomto příkladu vracím pouze název omezení spolu s jeho stavem vypnuto a důvěryhodné.
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1;
Výsledek:
+------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | +------------------------+---------------+------------------+
Tím se dotazuje sys.foreign_keys
systémový pohled. Víme, že vrací pouze deaktivovaná omezení, protože WHERE
klauzule specifikuje pouze řádky, které mají is_disabled
sloupec nastaven na 1
.
Pokud chcete vrátit pouze povoleno omezení cizího klíče, jednoduše změňte 1
na 0
.
Všimněte si, že is_not_trusted
příznak je také nastaven na 1
pro tato zakázaná omezení. Je to proto, že systém nemůže zaručit, že omezení zkontrolovalo všechna data. To dává smysl, protože deaktivace omezení otevírá možnost vstupu neplatných dat do databáze, aniž by byla zkontrolována.
Zde je znovu stejný dotaz, ale tentokrát uvádím tabulku a odkazovanou tabulku pro každé omezení:
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;
Výsledek:
+------------------------+------------+--------------------+---------------+------------------+ | Constraint | Table | Referenced Table | is_disabled | is_not_trusted | |------------------------+------------+--------------------+---------------+------------------| | FK_BandMember_Band | BandMember | Band | 1 | 1 | | FK_BandMember_Musician | BandMember | Musician | 1 | 1 | +------------------------+------------+--------------------+---------------+------------------+
Příklad 2 – Vrácení všech omezení cizího klíče
Následující dotaz vrátí vše omezení cizího klíče pro aktuální databázi (nejen ta zakázaná):
SELECT name AS 'Constraint', is_disabled, is_not_trusted FROM sys.foreign_keys;
Výsledek:
+--------------------------------+---------------+------------------+ | Constraint | is_disabled | is_not_trusted | |--------------------------------+---------------+------------------| | FK_BandMember_Band | 1 | 1 | | FK_BandMember_Musician | 1 | 1 | | FK_MembershipPeriod_BandMember | 0 | 0 | +--------------------------------+---------------+------------------+