V SQL Server můžete pomocí Transact-SQL vrátit seznam všech cizích klíčů a CHECK
omezení pro aktuální databázi.
Příklady na této stránce se dotazují na dvě systémová zobrazení za účelem získání těchto informací:
sys.foreign_keys
a
sys.check_constraints
. Můžete se dotazovat na každou zvlášť, nebo použít UNION
zobrazíte je všechny v jedné sadě výsledků.
Příklad 1 – Kombinovaná sada výsledků
V tomto příkladu používám UNION
pro vrácení cizích klíčů a CHECK
omezení ve stejné sadě výsledků.
SELECT OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', type_desc, is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, type_desc, is_not_disabled, is_>Výsledek:
+------------------+--------------------------- -----+------------------------+----------------+--- ----------------+| Tabulka | Omezení | type_desc | is_disabled | není_důvěryhodný ||------------------+---------------------------- ----+------------------------+----------------+---- --------------|| Člen kapely | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Člen kapely | Člen FK_Band_Musician | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Město | FK_City_Country | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Doba členství | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || Doba členství | FK_Období členství_Člen kapely | FOREIGN_KEY_CONSTRAINT | 0 | 0 |+------------------+---------------------------- ----+------------------------+----------------+---- --------------+V tomto případě aktuální databáze obsahuje čtyři cizí klíče a jeden
CHECK
omezení.Můžeme také vidět, zda je každé omezení povoleno nebo zakázáno, a také zda je důvěryhodné nebo ne.
Příklad 2 – Vrátit všechny sloupce
Tato dvě zobrazení vrátí více sloupců, než jsem uvedl v tomto příkladu. Vždy můžete použít zástupný znak k vrácení všech sloupců. Pokud to však uděláte, nebudete moci používat
UNION
, protože každý pohled vrací jiný počet sloupců.Proto je budete muset dotazovat samostatně. Například:
SELECT * FROM sys.foreign_keys;SELECT * FROM sys.check_constraints;To vytvoří dvě sady výsledků:jedna obsahuje cizí klíče a druhá obsahuje
CHECK
omezení.Z důvodu úspory místa nebudu zobrazovat výsledky tohoto dotazu. Ale tady je to, co produkuje druhý řádek (pomocí vertikálního výstupu, abyste nemuseli posouvat horizontálně):
SELECT * FROM sys.check_constraints;Výsledek (při použití vertikálního výstupu):
-[ ZÁZNAM 1 ]-------------------------název | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1parent_object_id | 1349579846typ | C type_desc | CHECK_CONSTRAINTcreate_date | 2019-09-11 00:33:02.587upravit_datum | 2019-09-11 00:33:02.587is_ms_shipped | 0is_published | 0is_schema_published | 0is_disabled | 0is_not_for_replication | 0is_not_trusted | 0parent_column_id | 0definice | ([Datum ukončení]>=[Datum zahájení])uses_database_collation | 1is_system_named | 0Do dotazu můžete zahrnout kterýkoli z těchto sloupců, ale pokud jej zkombinujete s cizími klíči, nezapomeňte zahrnout stejné sloupce v obou zobrazeních.
sys.foreign_keys
view vrátí několik dalších sloupců. Zde je upravený dotaz, kde vracím první řádek (podle názvu) z tohoto zobrazení.SELECT TOP(1) * FROM sys.foreign_keysORDER BY name;Výsledek (při použití vertikálního výstupu):
-[ ZÁZNAM 1 ]-------------------------název | 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.027upravit_datum | 2019-08-17 15:58:42.027is_ms_shipped | 0is_published | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1is_disabled | 0is_not_for_replication | 0is_not_trusted | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referential_action_desc | NO_ACTIONis_system_named | 0