sql >> Database >  >> RDS >> Sqlserver

Alle niet-vertrouwde beperkingen voor externe sleutels in SQL Server retourneren (T-SQL-voorbeeld)

Als u een lijst met alle niet-vertrouwde beperkingen voor externe sleutels in een SQL Server-database wilt retourneren, kunt u de onderstaande T-SQL-code uitvoeren.

Een niet-vertrouwde externe sleutel is een sleutel met zijn is_not_trusted vlag ingesteld op 1 .

Voorbeeld 1 – Alleen niet-vertrouwde beperkingen voor buitenlandse sleutels retourneren

Deze query retourneert alleen de niet-vertrouwde externe-sleutelbeperkingen in de huidige database. Voor dit voorbeeld retourneer ik alleen de naam van de beperking, de vertrouwde status, samen met de ingeschakelde/uitgeschakelde status.

SELECT 
  name AS 'Constraint',
  is_not_trusted,
  is_disabled
FROM sys.foreign_keys
WHERE is_not_trusted = 1;

Resultaat:

+------------------------+------------------+---------------+
| Constraint             | is_not_trusted   | is_disabled   |
|------------------------+------------------+---------------|
| FK_BandMember_Band     | 1                | 1             |
| FK_BandMember_Musician | 1                | 0             |
+------------------------+------------------+---------------+

Dit bevraagt ​​de sys.foreign_keys systeem bekijken. We weten dat het alleen niet-vertrouwde beperkingen retourneert omdat de WHERE clausule specificeert alleen rijen die de is_not_trusted . hebben kolom ingesteld op 1 .

Als u alleen vertrouwd wilt retourneren externe sleutelbeperkingen, verander gewoon de 1 naar 0 .

Ik heb ook de is_disabled . toegevoegd vlag, omdat het ons laat zien of de beperking momenteel is ingeschakeld of niet. We kunnen zien dat een van de beperkingen is ingeschakeld en de andere niet.

Dit toont aan dat een beperking niet kan worden vertrouwd, zelfs als deze is ingeschakeld. Dit komt omdat, wanneer u een beperking inschakelt (of maakt), u de mogelijkheid hebt om deze bestaande gegevens te laten controleren voordat deze wordt ingeschakeld. Als u ervoor kiest om bestaande gegevens niet te controleren, blijft de beperking niet vertrouwd zodra deze is ingeschakeld.

Hier is dezelfde query opnieuw, maar deze keer neem ik de tabel en de tabel waarnaar wordt verwezen voor elke beperking:

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_not_trusted = 1;

Resultaat:

+------------------------+------------+--------------------+---------------+------------------+
| Constraint             | Table      | Referenced Table   | is_disabled   | is_not_trusted   |
|------------------------+------------+--------------------+---------------+------------------|
| FK_BandMember_Band     | BandMember | Band               | 1             | 1                |
| FK_BandMember_Musician | BandMember | Musician           | 0             | 1                |
+------------------------+------------+--------------------+---------------+------------------+

Voorbeeld 2 – Alle beperkingen voor externe sleutels retourneren

De volgende zoekopdracht retourneert alle externe sleutelbeperkingen voor de huidige database (niet alleen de niet-vertrouwde):

SELECT 
  name AS 'Constraint',
  is_not_trusted,
  is_disabled
FROM sys.foreign_keys;

Resultaat:

+--------------------------------+------------------+---------------+
| Constraint                     | is_not_trusted   | is_disabled   |
|--------------------------------+------------------+---------------|
| FK_BandMember_Band             | 1                | 1             |
| FK_BandMember_Musician         | 1                | 0             |
| FK_MembershipPeriod_BandMember | 0                | 0             |
+--------------------------------+------------------+---------------+

  1. Converteer queryresultaten naar een door komma's gescheiden lijst in MariaDB

  2. Verbinding maken met de database met behulp van de NaviCat MySQL-client

  3. Voer PostgreSQL-query's uit vanaf de opdrachtregel

  4. Een Oracle Associative Array gebruiken in een SQL-query