sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man returnerar alla inaktiverade främmande nyckelbegränsningar i SQL Server (T-SQL-exempel)

Om du behöver returnera en lista över alla främmande nyckelbegränsningar som har inaktiverats i en SQL Server-databas kan du köra T-SQL-koden nedan.

Exempel 1 – Returnera endast inaktiverade utländska nyckelbegränsningar

Denna fråga returnerar endast de inaktiverade främmande nyckelbegränsningarna i den aktuella databasen. I det här exemplet returnerar jag bara namnet på begränsningen, tillsammans med dess inaktiverade och betrodda status.

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

Resultat:

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

Detta frågar efter sys.foreign_keys systemvy. Vi vet att det bara returnerar inaktiverade begränsningar eftersom WHERE sats anger endast rader som har is_disabled kolumn inställd på 1 .

Om du vill returnera endast aktiverad begränsningar för främmande nyckel, ändra helt enkelt 1 till 0 .

Observera att is_not_trusted flaggan är också inställd på 1 för dessa funktionshindrade begränsningar. Det beror på att systemet inte kan garantera att begränsningen har kontrollerat all data. Detta är vettigt, eftersom att inaktivera en begränsning öppnar upp möjligheten för ogiltig data att komma in i databasen utan att kontrolleras.

Här är samma fråga igen, men den här gången inkluderar jag tabellen och den refererade tabellen för varje 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_disabled = 1;

Resultat:

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

Exempel 2 – Returnera alla utländska nyckelbegränsningar

Följande fråga returnerar alla främmande nyckelbegränsningar för den aktuella databasen (inte bara de inaktiverade):

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

Resultat:

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

  1. Dynamisk datamaskering i SQL Server för avancerade användare

  2. Oracle SQL-utvecklare:Visa REFCURSOR-resultat i Grid?

  3. LADDA DATA LOKAL INFIL förbjuden i... PHP

  4. Hämtar datum med tidszonförskjutning