Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Връщане на всички чужди ключове и ПРОВЕРКА на ограничения в база данни на SQL Server (T-SQL примери)

В SQL Server можете да използвате Transact-SQL, за да върнете списък с всички външни ключове и CHECK ограничения за текущата база данни.

Примерите на тази страница изискват два системни изгледа, за да извлекат тази информация: sys.foreign_keys и sys.check_constraints . Можете да направите заявка за всеки от тях поотделно или да използвате UNION за да ги покажете всички в един набор от резултати.

Пример 1 – Комбиниран набор от резултати

В този пример използвам UNION за връщане на външни ключове и CHECK ограничения в същия набор от резултати.

ИЗБЕРЕТЕ OBJECT_NAME(parent_object_id) КАТО 'Таблица', име КАТО 'Ограничение', type_desc, is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), name, type_desc, ischedestraintss, is_Fno_disabledstrus; 

Резултат:

+------------------+------------------------------------ -----+-----------------------+--------------+--- ---------------+| Таблица | Ограничение | type_desc | е_забранено | е_не_доверен ||-----------------+---------------------------- ----+-----------------------+--------------+---- --------------|| Член на групата | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Член на групата | FK_BandMember_Musician | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Град | FK_Град_Държава | FOREIGN_KEY_CONSTRAINT | 0 | 0 || Период на членство | chkValidEndDate | CHECK_CONSTRAINT | 0 | 0 || Период на членство | FK_Период на членство_Член на групата | FOREIGN_KEY_CONSTRAINT | 0 | 0 |+------------------+--------------------- ----+-----------------------+--------------+---- --------------+

В този случай текущата база данни съдържа четири външни ключа и един CHECK ограничение.

Можем също да видим дали всяко ограничение е активирано или деактивирано, както и дали има доверие или не.

Пример 2 – Връщане на всички колони

Тези два изгледа връщат повече колони, отколкото съм посочил в този пример. Винаги можете да използвате заместващ знак, за да върнете всички колони. Ако обаче направите това, няма да можете да използвате UNION , тъй като всеки изглед връща различен брой колони.

Следователно ще трябва да ги запитате отделно. Например:

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

Това ще създаде два набора резултати:единият съдържа външните ключове, другият съдържа CHECK ограничения.

За да спестя място, няма да показвам резултатите от тази заявка. Но ето какво произвежда вторият ред (използвайки вертикален изход, за да ви спести от необходимостта да превъртате хоризонтално):

SELECT * FROM sys.check_constraints;

Резултат (с помощта на вертикален изход):

-[ ЗАПИС 1 ]------------------------------ име | chkValidEndDateobject_id | 1525580473principal_id | NULLschema_id | 1идентификатор_на_родител_обект | 1349579846вид | C type_desc | CHECK_CONSTRAINT дата_създаване | 2019-09-11 00:33:02.587modify_date | 2019-09-11 00:33:02.587is_ms_shipped | 0е_публикувано | 0is_schema_published | 0is_disabled | 0е_не_за_репликация | 0 не е_доверено | 0parent_column_id | 0определение | ([Крайна дата]>=[Начална дата])uses_database_collation | 1is_system_named | 0

Можете да включите всяка от тези колони в заявката си, но ако я комбинирате с външните ключове, не забравяйте да включите едни и същи колони и в двата изгледа.

sys.foreign_keys view връща още няколко колони. Ето една модифицирана заявка, при която връщам първия ред (по име) от този изглед.

ИЗБЕРЕТЕ TOP(1) * ОТ sys.foreign_keys ПОРЪЧАЙТЕ ПО име;

Резултат (с помощта на вертикален изход):

-[ ЗАПИС 1 ]------------------------------ име | FK_BandMember_Bandobject_id | 1317579732principal_id | NULLschema_id | 1идентификатор_на_родител_обект | 1285579618вид | F type_desc | FOREIGN_KEY_CONSTRAINT дата_създаване | 2019-08-17 15:58:42.027modify_date | 2019-08-17 15:58:42.027is_ms_shipped | 0е_публикувано | 0is_schema_published | 0referenced_object_id | 1253579504key_index_id | 1 е_забранено | 0е_не_за_репликация | 0 не е_доверено | 0delete_referential_action | 0delete_referential_action_desc | NO_ACTIONupdate_referential_action | 0update_referential_action_desc | NO_ACTION е_именувана на_системата | 0

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 невероятни ресурси за наблюдение на SQL Server за администратори на бази данни

  2. Как да направите изтриване на преминаваща заявка в SQL Server

  3. Групи за наличност на SQL Server AlwaysOn:Инсталация и конфигурация, част 1

  4. SQL Server Standard Edition High Availability Futures

  5. Осигуряване на SQL Server срещу множествено присъединяване