sql >> Databáze >  >> RDS >> Sqlserver

Jak vrátit všechna nedůvěryhodná omezení cizích klíčů na SQL Server (příklad T-SQL)

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 |+--------------------------------+-------------- ----+---------------+

  1. T-SQL:Odstranění všech duplicitních řádků, ale ponechání jednoho

  2. 2 způsoby, jak převést číslo na osmičkové číslo v MySQL

  3. Použití podmíněného příkazu UPDATE v SQL

  4. Vyberte N-tý řádek z tabulky v Oracle