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

Zwróć wszystkie klucze obce i sprawdź ograniczenia w bazie danych programu SQL Server (przykłady T-SQL)

W SQL Server możesz użyć Transact-SQL, aby zwrócić listę wszystkich kluczy obcych i CHECK ograniczenia dla bieżącej bazy danych.

Przykłady na tej stronie dotyczą dwóch widoków systemowych w celu pobrania tych informacji: sys.foreign_keys i sys.check_constraints . Możesz zapytać o każdy z nich osobno lub użyć UNION aby wyświetlić je wszystkie w jednym zestawie wyników.

Przykład 1 – Połączony zestaw wyników

W tym przykładzie używam UNION aby zwrócić klucze obce i CHECK ograniczenia w tym samym zestawie wyników.

SELECT OBJECT_NAME(parent_object_id) AS 'Tabela', nazwa AS 'Ograniczenie', type_desc, is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, type_desc, is_disabled, is_straint_checkted>; 

Wynik:

+------------------+-------------------------------- ------+-------------+----------------+--- ---------------+| Tabela | Ograniczenie | type_desc | is_disabled | nie jest_zaufany ||------------------+--------------------------------- ----+-------------+----------------+---- --------------|| Członek Zespołu | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Członek Zespołu | FK_BandMember_Musician | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Miasto | FK_Miasto_Kraj | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Okres członkostwa | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || Okres członkostwa | FK_MembershipPeriod_BandMember | FOREIGN_KEY_CONSTRAINT | 0 | 0 |+-------------------+------------------------------------------ ----+-------------+----------------+---- --------------+

W tym przypadku bieżąca baza danych zawiera cztery klucze obce i jeden CHECK ograniczenie.

Możemy również sprawdzić, czy każde ograniczenie jest włączone, czy wyłączone, a także czy jest zaufane, czy nie.

Przykład 2 – Zwróć wszystkie kolumny

Te dwa widoki zwracają więcej kolumn niż wymieniłem w tym przykładzie. Zawsze możesz użyć symbolu wieloznacznego, aby zwrócić wszystkie kolumny. Jeśli jednak to zrobisz, nie będziesz mógł używać UNION , ponieważ każdy widok zwraca inną liczbę kolumn.

Dlatego będziesz musiał zapytać o nie osobno. Na przykład:

WYBIERZ * Z sys.foreign_keys;WYBIERZ * Z sys.check_constraints;

To da dwa zestawy wyników:jeden zawierający klucze obce, drugi zawierający CHECK ograniczenia.

Aby zaoszczędzić miejsce, nie wyświetlam wyników tego zapytania. Ale oto, co tworzy druga linia (używając danych wyjściowych w pionie, aby uniknąć konieczności przewijania w poziomie):

WYBIERZ * Z sys.check_constraints;

Wynik (przy użyciu wyjścia pionowego):

-[ REKORD 1 ]-------------------------nazwa | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1parent_object_id | 1349579846typ | C type_desc | CHECK_CONSTRAINTcreate_date | 2019-09-11 00:33:02.587modify_date | 2019-09-11 00:33:02.587is_ms_shipped | 0jest_opublikowany | 0is_schema_opublikowane | 0is_disabled | 0is_not_for_replication | 0jest_niezaufany | 0identyfikator_kolumny_nadrzędnej | 0definicja | ([DataZakończenia]>=[DataRozpoczęcia])uses_database_collation | 1is_nazwa_systemu | 0

Możesz uwzględnić w zapytaniu dowolną z tych kolumn, ale jeśli połączysz ją z kluczami obcymi, pamiętaj, aby uwzględnić te same kolumny w obu widokach.

sys.foreign_keys widok zwraca jeszcze kilka kolumn. Oto zmodyfikowane zapytanie, w którym zwracam pierwszy wiersz (według nazwy) z tego widoku.

WYBIERZ TOP(1) * Z sys.foreign_keysZAMÓW WG nazwy;

Wynik (przy użyciu wyjścia pionowego):

-[ REKORD 1 ]-------------------------nazwa | FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1parent_object_id | 1285579618typ | F type_desc | FOREIGN_KEY_CONSTRAINTcreate_date | 2019-08-17 15:58:42.027modify_date | 2019-08-17 15:58:42.027is_ms_shipped | 0jest_opublikowany | 0is_schema_opublikowane | 0referencyjny_id_obiektu | 1253579504key_index_id | 1is_disabled | 0is_not_for_replication | 0jest_niezaufany | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referencential_action_desc | NO_ACTIONis_system_named | 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. Różnica między odczytem zatwierdzonym a odczytem powtarzalnym

  2. Zaktualizuj SQL z numeracją porządkową

  3. Jak zignorować błąd zduplikowanego klucza w T-SQL (SQL Server)

  4. Rozwiązywanie problemów z długimi zapytaniami w MS SQL Server

  5. Słaba wydajność planu wykonania procedury składowanej w SQL - podsłuchiwanie parametrów