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

Jak vrátit všechna zakázaná omezení cizích klíčů v SQL Server (příklad T-SQL)

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

  1. Kód chyby:1406. Data jsou pro sloupec příliš dlouhá – MySQL

  2. Úvod do datových typů SQL

  3. Kámo, kdo vlastní ten #temp stůl?

  4. Deset tipů, jak začít s PostgreSQL