sql >> Database >  >> RDS >> Sqlserver

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

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

Voorbeeld 1 – Uitgeschakelde externe sleutelbeperkingen alleen retourneren

Deze query retourneert alleen de uitgeschakelde externe-sleutelbeperkingen in de huidige database. Voor dit voorbeeld retourneer ik alleen de naam van de beperking, samen met de status uitgeschakeld en vertrouwd.

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

Resultaat:

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

Dit bevraagt ​​de sys.foreign_keys systeem bekijken. We weten dat het alleen uitgeschakelde beperkingen retourneert omdat de WHERE clausule specificeert alleen rijen met de is_disabled kolom ingesteld op 1 .

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

Merk op dat de is_not_trusted vlag is ook ingesteld op 1 voor deze gehandicapte beperkingen. Dat komt omdat het systeem niet kan garanderen dat de beperking alle gegevens heeft gecontroleerd. Dit is logisch, omdat het uitschakelen van een beperking de kans vergroot dat ongeldige gegevens de database binnenkomen zonder te worden gecontroleerd.

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

Resultaat:

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

Voorbeeld 2 – Alle beperkingen voor externe sleutels retourneren

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

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

Resultaat:

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

  1. Hoe Asinh() werkt in PostgreSQL

  2. Welke versie van PostgreSQL gebruik ik?

  3. Databaseschema-objectcontrole automatiseren

  4. Fix:"Onbekende tabel 'locales' in information_schema" in MariaDB