Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zwrócić wszystkie wyłączone ograniczenia kluczy obcych w programie SQL Server (przykład T-SQL)

Jeśli chcesz zwrócić listę wszystkich ograniczeń kluczy obcych, które zostały wyłączone w bazie danych SQL Server, możesz uruchomić poniższy kod T-SQL.

Przykład 1 – Wyłączone ograniczenia klucza obcego tylko do zwrotu

To zapytanie zwraca tylko wyłączone ograniczenia klucza obcego w bieżącej bazie danych. W tym przykładzie zwracam tylko nazwę ograniczenia wraz z jego statusem wyłączonego i zaufanego.

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

Wynik:

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

To wysyła zapytanie do sys.foreign_keys widok systemu. Wiemy, że zwraca tylko wyłączone ograniczenia, ponieważ WHERE klauzula określa tylko wiersze, które mają is_disabled kolumna ustawiona na 1 .

Jeśli chcesz zwrócić tylko włączone ograniczenia klucza obcego, po prostu zmień 1 do 0 .

Zwróć uwagę, że is_not_trusted flaga jest również ustawiona na 1 dla tych niepełnosprawnych ograniczeń. Dzieje się tak, ponieważ system nie może zagwarantować, że ograniczenie sprawdziło wszystkie dane. Ma to sens, ponieważ wyłączenie ograniczenia otwiera możliwość wprowadzenia nieprawidłowych danych do bazy danych bez sprawdzania.

Oto znowu to samo zapytanie, ale tym razem dołączam tabelę i tabelę odniesienia dla każdego ograniczenia:

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;

Wynik:

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

Przykład 2 – Zwróć wszystkie ograniczenia klucza obcego

Następujące zapytanie zwraca wszystkie ograniczenia klucza obcego dla bieżącej bazy danych (nie tylko tych wyłączonych):

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co oznacza ON [PRIMARY]?

  2. Jak zmienić rozmiar kolumny w SQL Server (T-SQL)

  3. Zaktualizuj zapytanie za pomocą podzapytania w SQL Server

  4. Automatyzacja defragmentacji indeksów w bazie danych MS SQL Server

  5. Jaka jest różnica między Scope_Identity(), Identity(), @@Identity i Ident_Current()?