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

Върнете всички външни ключове, които препращат към дадена таблица в SQL Server

Ако трябва да върнете всички външни ключове, които препращат към дадена таблица в SQL Server, опитайте един от следните методи.

Първият метод отправя заявка към sys.foreign_keys системен изглед. Вторият метод изпълнява sp_fkeys системна съхранена процедура.

Опция 1 – sys.foreign_keys

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

USE WideWorldImportersDW;
SELECT 
  OBJECT_NAME(referenced_object_id) AS [PK Table],
  name AS [Foreign Key],
  SCHEMA_NAME(schema_id) AS [FK Schema],
  OBJECT_NAME(parent_object_id) AS [FK Table]
FROM sys.foreign_keys
WHERE referenced_object_id = OBJECT_ID('Dimension.City');

Резултат:

+------------+---------------------------------------+-------------+------------+
| PK Table   | Foreign Key                           | FK Schema   | FK Table   |
|------------+---------------------------------------+-------------+------------|
| City       | FK_Fact_Order_City_Key_Dimension_City | Fact        | Order      |
| City       | FK_Fact_Sale_City_Key_Dimension_City  | Fact        | Sale       |
+------------+---------------------------------------+-------------+------------+

В този случай използвам WideWorldImportersDW база данни и връщам външните ключове, които препращат към Dimension.City таблица (Dimension.City таблицата съдържа колоната с първичен ключ, която препраща към външните ключове).

Опция 2 – sp_fkeys

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

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

EXEC sp_fkeys 
  @pktable_name = 'City', 
  @pktable_owner = 'Dimension';

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

-[ RECORD 1 ]-------------------------
PKTABLE_QUALIFIER | WideWorldImportersDW
PKTABLE_OWNER     | Dimension
PKTABLE_NAME      | City
PKCOLUMN_NAME     | City Key
FKTABLE_QUALIFIER | WideWorldImportersDW
FKTABLE_OWNER     | Fact
FKTABLE_NAME      | Order
FKCOLUMN_NAME     | City Key
KEY_SEQ           | 1
UPDATE_RULE       | 1
DELETE_RULE       | 1
FK_NAME           | FK_Fact_Order_City_Key_Dimension_City
PK_NAME           | PK_Dimension_City
DEFERRABILITY     | 7
-[ RECORD 2 ]-------------------------
PKTABLE_QUALIFIER | WideWorldImportersDW
PKTABLE_OWNER     | Dimension
PKTABLE_NAME      | City
PKCOLUMN_NAME     | City Key
FKTABLE_QUALIFIER | WideWorldImportersDW
FKTABLE_OWNER     | Fact
FKTABLE_NAME      | Sale
FKCOLUMN_NAME     | City Key
KEY_SEQ           | 1
UPDATE_RULE       | 1
DELETE_RULE       | 1
FK_NAME           | FK_Fact_Sale_City_Key_Dimension_City
PK_NAME           | PK_Dimension_City
DEFERRABILITY     | 7

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

EXEC sp_fkeys 
  @fktable_name = 'Order', 
  @fktable_owner = 'Fact';

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

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

Тази статия използва TableHasForeignRef аргумент на 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. Как да зададете цвета на лентата на състоянието в SSMS за различни екземпляри на SQL сървър - SQL Server / TSQL урок, част 6

  2. Как да върнете всички деактивирани ограничения CHECK в SQL Server (пример за T-SQL)

  3. Относно командата GO в SQL Server

  4. Как работи SET ROWCOUNT в SQL Server

  5. Как да изтриете първите 1000 реда от таблица с помощта на Sql Server 2008?