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 | 0Moż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