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

Избройте всички външни ключове в таблица в SQL Server

По-долу са два метода, които можете да използвате, за да върнете списък с външни ключове за дадена таблица в SQL Server.

Това е подобно на връщането на външните ключове въз основа на таблицата с референтни/първични ключове, с изключение на това, че връщам външните ключове въз основа на самата таблица с препратки/външни ключове.

Опция 1 – sys.foreign_keys

Следният код извлича всички ограничения на външния ключ в дадената таблица, заедно с посочените таблици.

ИЗПОЛЗВАЙТЕ WideWorldImportersDW;ИЗБЕРЕТЕ OBJECT_NAME(parent_object_id) КАТО [FK Таблица], име КАТО [Външен ключ], OBJECT_NAME(referenced_object_id) КАТО [PK Table]FROM sys.foreign_keysWHERE parent_object_id('FJECT.OID); предварително> 

Резултат:

+-----------+-------------------------------- ------------------+-----------+| FK Таблица | Външен ключ | PK таблица ||------------+-------------------------------- ------------------+-----------|| Поръчай | FK_Fact_Order_City_Key_Dimension_City | Град || Поръчай | FK_Факт_Поръчка_Клиент_Ключ_Измерение_Клиент | Клиент || Поръчай | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Art | Стоков артикул || Поръчай | FK_Fact_Order_Order_Date_Key_Dimension_Date | Дата || Поръчай | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Дата || Поръчай | FK_Факт_Поръчка_Продавач_Ключ_Измерение_Служител | Служител || Поръчай | FK_Факт_Поръчка_Избор_Ключ_Измерение_Служител | Служител |+------------+-------------------------------- ------------------+-----------+

В този случай използвам WideWorldImportersDW база данни и връщам външните ключове за Fact.Order таблица.

Опция 2 – sp_fkeys

Друг начин да получите външните ключове, които препращат към определена таблица, е да използвате sp_fkeys системна съхранена процедура. Тази съхранена процедура ни предоставя избор за получаване на външни ключове въз основа (наред с други неща) на реферираната таблица или на референтната таблица.

В този случай се интересуваме да получим външните ключове въз основа на таблицата с външни ключове, така че можем да направим това:

EXEC sp_fkeys @fktable_name ='Поръчка', @fktable_owner ='Факт';

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

-[ ЗАПИС 1 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | CityPKCOLUMN_NAME | Градски ключFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Градски ключKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7-[ ЗАПИС 2 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | КлиентPKCOLUMN_NAME | Клиентски ключFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Ключ на клиентаKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7-[ ЗАПИС 3 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | ДатаPKCOLUMN_NAME | ДатаFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Дата на поръчката KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ ЗАПИС 4 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | ДатаPKCOLUMN_NAME | ДатаFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Ключ за дата на изборKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ ЗАПИС 5 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | EmployeePKCOLUMN_NAME | Ключ за служителиFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Продавач KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeEFERRABILITY | 7-[ ЗАПИС 6 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | EmployeePKCOLUMN_NAME | Ключ за служителиFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Ключ за изборKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeEFERRABILITY | 7-[ ЗАПИС 7 ]------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | ИзмерениеPKTABLE_NAME | Стоков артикулPKCOLUMN_NAME | Ключ на стоков артикулFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | ФактFKTABLE_NAME | ПоръчкаFKCOLUMN_NAME | Стоков артикул KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock ItemPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7

Това може лесно да се превключи за търсене на външни ключове въз основа на таблицата с първичен ключ, като просто замените параметрите с @pktable_name и @pktable_owner :

EXEC sp_fkeys @pktable_name ='Град', @pktable_owner ='Измерение';

Проверка вярно/грешно

Ако просто искате да знаете дали дадена таблица има външен ключ или не, но не искате всичко да е изброено, вижте Проверете дали таблицата има външен ключ в SQL Server с OBJECTPROPERTY().

Тази статия използва TableHasForeignKey аргумент на OBJECTPROPERTY() функция за връщане на 1 ако таблицата има външен ключ и 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. Защо SQL Server използва индексно сканиране вместо търсене на индекс, когато клаузата WHERE съдържа параметризирани стойности

  2. Разгледайте причините и решенията за повреда в базата данни на SQL Server

  3. Поправете съобщение 8117 „Операнд типът данни varchar е невалиден за оператор сума“ в SQL Server

  4. Как да предадете параметрите на стойността на таблицата към съхранената процедура от .net код

  5. Какво е правилното име за таблица за асоцииране (връзка много към много)