sql >> Database >  >> RDS >> Sqlserver

Retourneer alle externe sleutels en CONTROLEER-beperkingen in een SQL Server-database (T-SQL-voorbeelden)

In SQL Server kunt u Transact-SQL gebruiken om een ​​lijst met alle externe sleutels te retourneren en CHECK beperkingen voor de huidige database.

De voorbeelden op deze pagina vragen twee systeemweergaven om deze informatie op te halen: sys.foreign_keys en sys.check_constraints . U kunt elk afzonderlijk opvragen of UNION . gebruiken om ze allemaal in een enkele resultatenset weer te geven.

Voorbeeld 1 – Gecombineerde resultatenset

In dit voorbeeld gebruik ik UNION om buitenlandse sleutels terug te geven en CHECK beperkingen in dezelfde resultaatset.

SELECT OBJECT_NAME(parent_object_id) AS 'Table', naam 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; 

Resultaat:

+------------------+--------------------------- -----+------------------------+---------------+--- ---------------+| Tafel | beperking | type_desc | is_disabled | is_not_trusted ||------------------+---------------------------- ----+------------------------+---------------+---- --------------|| Bandlid | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Bandlid | FK_BandMember_Musicus | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Stad | FK_City_Land | FOREIGN_KEY_CONSTRAINT | 0 | 0 || LidmaatschapPeriode | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || LidmaatschapPeriode | FK_MembershipPeriod_BandMember | FOREIGN_KEY_CONSTRAINT | 0 | 0 |+------------------+---------------------------- ----+------------------------+---------------+---- --------------+

In dit geval bevat de huidige database vier externe sleutels en één CHECK beperking.

We kunnen ook zien of elke beperking is ingeschakeld of uitgeschakeld, en of deze vertrouwd is of niet.

Voorbeeld 2 – Alle kolommen retourneren

Deze twee weergaven retourneren meer kolommen dan ik in dit voorbeeld heb vermeld. U kunt altijd een jokerteken gebruiken om alle kolommen te retourneren. Als u dit echter doet, kunt u UNION . niet gebruiken , omdat elke weergave een ander aantal kolommen retourneert.

Daarom moet u ze afzonderlijk opvragen. Bijvoorbeeld:

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

Dat levert twee resultaatsets op:één met de refererende sleutels, de andere met de CHECK beperkingen.

Om ruimte te besparen, zal ik de resultaten van die zoekopdracht niet weergeven. Maar dit is wat de tweede regel produceert (met behulp van verticale uitvoer om te voorkomen dat u horizontaal hoeft te scrollen):

SELECT * FROM sys.check_constraints;

Resultaat (met verticale uitvoer):

-[ RECORD 1 ]-------------------------naam | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1ouder_object_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 | 0is_published | 0is_schema_published | 0is_disabled | 0is_not_for_replicatie | 0is_not_trusted | 0ouder_kolom_id | 0definitie | ([Einddatum]>=[Begindatum])gebruikt_database_collation | 1is_system_named | 0

U kunt elk van deze kolommen in uw zoekopdracht opnemen, maar als u deze combineert met de refererende sleutels, zorg er dan voor dat u dezelfde kolommen in beide weergaven opneemt.

De sys.foreign_keys view retourneert nog een paar kolommen. Hier is een aangepaste zoekopdracht, waarbij ik de eerste rij (op naam) uit die weergave terugstuur.

SELECTEER TOP(1) * VANUIT sys.foreign_keysORDER OP naam;

Resultaat (met verticale uitvoer):

-[ RECORD 1 ]-------------------------naam | FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1ouder_object_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 | 0is_published | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1is_disabled | 0is_not_for_replicatie | 0is_not_trusted | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referential_action_desc | NO_ACTIONis_system_named | 0

  1. Reden waarom orakel hoofdlettergevoelig is?

  2. MariaDB 10 installeren en beveiligen in CentOS 6

  3. Hoe krijg ik de laatst ingevoerde ID van een MySQL-tabel in PHP?

  4. Django + Psycopg2:InterfaceError:alleen protocol 3 ondersteund