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

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

Aby zwrócić listę wszystkich niezaufanych ograniczeń kluczy obcych w bazie danych SQL Server, możesz uruchomić poniższy kod T-SQL.

Niezaufany klucz obcy to taki, który ma swój is_not_trusted flaga ustawiona na 1 .

Przykład 1 – Zwróć tylko ograniczenia dotyczące niezaufanego klucza obcego

To zapytanie zwraca tylko niezaufane ograniczenia klucza obcego w bieżącej bazie danych. W tym przykładzie zwracam tylko nazwę ograniczenia, jego status zaufany oraz status włączony/wyłączony.

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

Wynik:

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

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

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

Dołączyłem również is_disabled flaga, ponieważ pokazuje nam, czy ograniczenie jest aktualnie włączone, czy nie. Widzimy, że jedno z ograniczeń jest włączone, a drugie nie.

To pokazuje, że ograniczenie może być niezaufane, nawet jeśli jest włączone. Dzieje się tak, ponieważ po włączeniu (lub utworzeniu) ograniczenia masz możliwość sprawdzenia istniejących danych przed jego włączeniem. Jeśli zdecydujesz się nie sprawdzać istniejących danych, ograniczenie pozostanie niezaufane po włączeniu.

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

Wynik:

+------------------------+------------+--------------------+---------------+------------------+
| Constraint             | Table      | Referenced Table   | is_disabled   | is_not_trusted   |
|------------------------+------------+--------------------+---------------+------------------|
| FK_BandMember_Band     | BandMember | Band               | 1             | 1                |
| FK_BandMember_Musician | BandMember | Musician           | 0             | 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 niezaufanych):

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

Wynik:

+--------------------------------+------------------+---------------+
| Constraint                     | is_not_trusted   | is_disabled   |
|--------------------------------+------------------+---------------|
| FK_BandMember_Band             | 1                | 1             |
| FK_BandMember_Musician         | 1                | 0             |
| 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. Kolejność wykonania zapytania SQL

  2. Jak znaleźć format daty używany w bieżącej sesji w SQL Server (T-SQL)

  3. Jak mogę pogrupować według kolumny daty i godziny bez uwzględniania czasu?

  4. SHOWPLAN_ALL serwera SQL

  5. Jak generować dane testowe w SQL Server