Chcete-li vrátit seznam všech nedůvěryhodných omezení cizích klíčů v databázi SQL Server, můžete spustit kód T-SQL níže.
Nedůvěryhodný cizí klíč je takový, který má svůj is_not_trusted
příznak nastaven na 1
.
Příklad 1 – Vrácení pouze nedůvěryhodných omezení cizího klíče
Tento dotaz vrátí pouze nedůvěryhodná omezení cizího klíče v aktuální databázi. V tomto příkladu vracím pouze název omezení, jeho důvěryhodný stav spolu s jeho stavem povoleno/zakázáno.
SELECT name AS 'Constraint', is_not_trusted, is_disabledFROM sys.foreign_keysWHERE is_not_trusted =1;
Výsledek:
+------------------------+------------------+-- -------------+| Omezení | není_důvěryhodný | is_disabled ||-----------------------+------------------+--- ------------|| FK_BandMember_Band | 1 | 1 || Člen FK_Band_Musician | 1 | 0 |+------------------------+------------------+--- ------------+
Tím se dotazuje sys.foreign_keys
systémový pohled. Víme, že vrací pouze nedůvěryhodná omezení, protože WHERE
klauzule specifikuje pouze řádky, které mají is_not_trusted
sloupec nastaven na 1
.
Pokud chcete vrátit pouze důvěryhodné omezení cizího klíče, jednoduše změňte 1
na 0
.
Zahrnul jsem také is_disabled
flag, protože nám ukazuje, zda je omezení aktuálně povoleno nebo ne. Vidíme, že jedno z omezení je povoleno a druhé ne.
To demonstruje skutečnost, že omezení může být nedůvěryhodné, i když je povoleno. Je to proto, že když povolíte (nebo vytvoříte) omezení, máte možnost nechat jej zkontrolovat všechna existující data, než bude povoleno. Pokud se rozhodnete nekontrolovat existující data, omezení zůstane po aktivaci nedůvěryhodné.
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_trustedFROM sys.foreign_keysWHERE is_not_trusted> =1;Výsledek:
+------------------------+------------+-------- ------------+---------------+------------------+| Omezení | Tabulka | Referenční tabulka | is_disabled | není_důvěryhodný ||------------------------+------------+--------- -----------+---------------+------------------|| FK_BandMember_Band | Člen kapely | Kapela | 1 | 1 || Člen FK_Band_Musician | Člen kapely | Hudebník | 0 | 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 ty nedůvěryhodné):
SELECT name AS 'Constraint', is_not_trusted, is_disabledFROM sys.foreign_keys;Výsledek:
+--------------------------------+------------- -----+----------------+| Omezení | není_důvěryhodný | is_disabled ||--------------------------------+-------------- ----+----------------|| FK_BandMember_Band | 1 | 1 || Člen FK_Band_Musician | 1 | 0 || FK_Období členství_Člen kapely | 0 | 0 |+--------------------------------+-------------- ----+---------------+