Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć wszystkie klucze obce, które odwołują się do danej tabeli w SQL Server

Jeśli musisz zwrócić wszystkie klucze obce, które odwołują się do danej tabeli w programie SQL Server, wypróbuj jedną z następujących metod.

Pierwsza metoda wysyła zapytanie do sys.foreign_keys widok systemu. Druga metoda wykonuje sp_fkeys systemowa procedura składowana.

Opcja 1 – sys.foreign_keys

Poniższy kod pobiera wszystkie klucze obce, które odwołują się do danej tabeli, wraz z kluczami podstawowymi i tabelami kluczy obcych. Dołączam również schemat dla tabel kluczy obcych.

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');

Wynik:

+------------+---------------------------------------+-------------+------------+
| 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       |
+------------+---------------------------------------+-------------+------------+

W tym przypadku używam WideWorldImportersDW i zwracam klucze obce, które odwołują się do Dimension.City tabela (Dimension.City tabela zawiera główną kolumnę klucza, do której odwołują się klucze obce).

Opcja 2 – sp_fkeys

Innym sposobem na uzyskanie kluczy obcych, które odwołują się do konkretnej tabeli, jest użycie sp_fkeys systemowa procedura składowana. Ta procedura składowana daje nam możliwość wyboru pobierania kluczy obcych na podstawie (między innymi) tabeli odniesienia lub tabeli odniesienia.

W tym przypadku jesteśmy zainteresowani uzyskaniem kluczy obcych, które odwołują się do danej tabeli, więc możemy to zrobić:

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

Wynik (przy użyciu wyjścia pionowego):

-[ 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

Można to łatwo zmienić, aby wyszukać klucze obce na podstawie tabeli kluczy obcych, po prostu zastępując parametry @fktable_name i @fktable_owner :

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

Prawda/fałszywa kontrola

Jeśli chcesz po prostu wiedzieć, czy do tabeli odwołuje się klucz obcy, ale nie chcesz, aby wszystko było wymienione, zobacz Sprawdź, czy do tabeli odwołuje się klucz obcy w SQL Server za pomocą OBJECTPROPERTY().

Ten artykuł używa TableHasForeignRef argument OBJECTPROPERTY() funkcja zwracająca 1 jeśli do tabeli odwołuje się klucz obcy, a 0 jeśli nie.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak DB_NAME() działa w SQL Server

  2. Jak znaleźć wszystkie tabele z kolumną tożsamości w bazie danych SQL Server — SQL Server / T-SQL Tutorial, część 45

  3. konwersja znacznika czasu Epoch na serwer sql (format czytelny dla człowieka)

  4. Konserwacja baz danych systemu SQL Server

  5. Jak wyświetlić zapytanie i wyniki w oddzielnej karcie w SQL Server Management Studio (SSMS) — samouczek SQL Server / TSQL, część 15