sql >> Databáze >  >> RDS >> Sqlserver

Vrátit všechny cizí klíče a KONTROLA omezení v databázi SQL Server (příklady T-SQL)

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

Do 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

  1. Co je předávání parametrů do SQL a proč to potřebuji?

  2. PSQLException:ERROR:vztah TABLE_NAME neexistuje

  3. MariaDB JSON_REPLACE() Vysvětleno

  4. Jak ADD_MONTHS() funguje v MariaDB