sql >> Database teknologi >  >> RDS >> Sqlserver

Returner alle fremmednøgler &CHECK-begrænsninger i en SQL Server-database (T-SQL-eksempler)

I SQL Server kan du bruge Transact-SQL til at returnere en liste over alle fremmednøgler og CHECK begrænsninger for den aktuelle database.

Eksemplerne på denne side forespørger to systemvisninger for at hente disse oplysninger: sys.foreign_keys og sys.check_constraints . Du kan forespørge hver enkelt separat eller bruge UNION for at vise dem alle i et enkelt resultatsæt.

Eksempel 1 – Kombineret resultatsæt

I dette eksempel bruger jeg UNION for at returnere fremmednøgler og CHECK begrænsninger i det samme resultatsæt.

VÆLG 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_disabled, is_not_trustedFROM> 

Resultat:

+-------------------+-------------------------------- -----+------------------------+--------------+--- ---------------+| Tabel | Begrænsning | type_desc | er_deaktiveret | er_ikke_pålidelig ||----------------+-------------------------------- ----+------------------------+---------------+---- --------------|| Bandmedlem | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Bandmedlem | FK_BandMember_Musician | FOREIGN_KEY_CONSTRAINT | 0 | 0 || By | FK_City_Country | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Medlemskabsperiode | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || Medlemskabsperiode | FK_MembershipPeriod_BandMember | FOREIGN_KEY_CONSTRAINT | 0 | 0 |+-------------------+---------------------------- ----+------------------------+---------------+---- --------------+

I dette tilfælde indeholder den aktuelle database fire fremmednøgler og en CHECK begrænsning.

Vi kan også se, om hver begrænsning er aktiveret eller deaktiveret, samt om den er tillid til eller ej.

Eksempel 2 – Returner alle kolonner

Disse to visninger returnerer flere kolonner, end jeg har angivet i dette eksempel. Du kan altid bruge et jokertegn til at returnere alle kolonner. Men hvis du gør dette, vil du ikke være i stand til at bruge UNION , fordi hver visning returnerer et forskelligt antal kolonner.

Derfor skal du forespørge dem separat. For eksempel:

SELECT * FROM sys.foreign_keys;SELECT * FROM sys.check_constraints;

Det vil producere to resultatsæt:det ene indeholder fremmednøglerne, det andet indeholder CHECK begrænsninger.

For at spare plads vil jeg ikke vise resultaterne af den forespørgsel. Men her er, hvad den anden linje producerer (ved at bruge lodret output for at spare dig for at skulle rulle vandret):

VÆLG * FRA sys.check_constraints;

Resultat (ved hjælp af lodret output):

-[ RECORD 1 ]-------------------------navn | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1forælder_objekt-id | 1349579846type | C type_desc | CHECK_CONSTRAINTcreate_date | 2019-09-11 00:33:02.587modify_date | 2019-09-11 00:33:02.587is_ms_shipped | 0er_udgivet | 0is_schema_published | 0is_disabled | 0er_ikke_til_replikering | 0is_not_trusted | 0parent_column_id | 0 definition | ([EndDate]>=[StartDate])bruger_database_sortering | 1is_system_named | 0

Du kan inkludere enhver af disse kolonner i din forespørgsel, men hvis du kombinerer den med fremmednøglerne, skal du sørge for at inkludere de samme kolonner på tværs af begge visninger.

sys.foreign_keys visning returnerer et par kolonner mere. Her er en ændret forespørgsel, hvor jeg returnerer den første række (efter navn) fra den visning.

SELECT TOP(1) * FROM sys.foreign_keysORDER BY name;

Resultat (ved hjælp af lodret output):

-[ RECORD 1 ]-------------------------navn | FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1forælder_objekt-id | 1285579618type | F type_desc | FOREIGN_KEY_CONSTRAINTcreate_date | 2019-08-17 15:58:42.027modify_date | 2019-08-17 15:58:42.027is_ms_shipped | 0er_udgivet | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1er_deaktiveret | 0er_ikke_til_replikering | 0is_not_trusted | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referential_action_desc | NO_ACTION er_systemnavnet | 0

  1. SQL-forespørgsel for at finde N. højeste løn fra en løntabel

  2. Automatisering af sikkerhedsrevisioner til PostgreSQL

  3. Generer_serier i Postgres fra start- og slutdato i en tabel

  4. Hvordan IKKE REGEXP virker i MySQL