sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan returneres alle upålidelige udenlandske nøglebegrænsninger i SQL Server (T-SQL-eksempel)

For at returnere en liste over alle upålidelige fremmednøglebegrænsninger i en SQL Server-database kan du køre T-SQL-koden nedenfor.

En fremmednøgle, der ikke er tillid til, er en, der har sin is_not_trusted flag sat til 1 .

Eksempel 1 – Returner kun upålidelige udenlandske nøglebegrænsninger

Denne forespørgsel returnerer kun de ubetroede fremmednøglebegrænsninger i den aktuelle database. For dette eksempel returnerer jeg kun navnet på begrænsningen, dens betroede status sammen med dens aktiverede/deaktiverede status.

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

Resultat:

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

Dette forespørger sys.foreign_keys systemvisning. Vi ved, at det kun returnerer upålidelige begrænsninger, fordi WHERE klausul specificerer kun rækker, der har is_not_trusted kolonne sat til 1 .

Hvis du kun vil returnere betroet fremmednøglebegrænsninger, skal du blot ændre 1 til 0 .

Jeg har også inkluderet is_disabled flag, fordi det viser os, om begrænsningen i øjeblikket er aktiveret eller ej. Vi kan se, at en af ​​begrænsningerne er aktiveret og den anden ikke.

Dette viser det faktum, at en begrænsning kan være ubetroet, selv når den er aktiveret. Dette skyldes, at når du aktiverer (eller opretter) en begrænsning, har du mulighed for at få den til at kontrollere eksisterende data, før den aktiveres. Hvis du vælger ikke at kontrollere eksisterende data, vil begrænsningen forblive upålidelig, når den er aktiveret.

Her er den samme forespørgsel igen, men denne gang inkluderer jeg tabellen og den refererede tabel for hver begrænsning:

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;

Resultat:

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

Eksempel 2 – Returner alle begrænsninger for fremmednøgle

Følgende forespørgsel returnerer alle fremmednøglebegrænsninger for den aktuelle database (ikke kun de ikke-pålidelige):

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

Resultat:

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

  1. SQL Server-svarende til WM_CONCAT-funktionen

  2. Jeg kan ikke få min login-formular til at oprette forbindelse til at interagere korrekt med mySQL-databasen

  3. PostgreSQL-loganalyse med pgBadger

  4. Sådan fortsætter du Cursor Loop-behandling efter undtagelse i Oracle