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

Wyświetl listę wszystkich kluczy obcych w tabeli w SQL Server

Poniżej znajdują się dwie metody, których można użyć do zwrócenia listy kluczy obcych dla danej tabeli w SQL Server.

Jest to podobne do zwracania kluczy obcych na podstawie tabeli kluczy referencyjnych/podstawowych, z wyjątkiem tego, że zwracam klucze obce na podstawie samej tabeli kluczy referencyjnych/obcych.

Opcja 1 – sys.foreign_keys

Poniższy kod pobiera wszystkie ograniczenia klucza obcego w danej tabeli, wraz z tabelami, do których się odwołuje.

USE WideWorldImportersDW;SELECT OBJECT_NAME(parent_object_id) AS [FK Table], name AS [Foreign Key], OBJECT_NAME(referenced_object_id) AS [PK Table]FROM sys.foreign_keysWHERE parent_object_id =OBJECT_ID('Fact.Order'); pre> 

Wynik:

+--------------------------+--------------------------------- -------+-------------+| Tabela FK | Klucz obcy | Tablica PK ||------------+--------------------------------- ------------------+------------|| Zamów | FK_Fact_Order_City_Key_Dimension_City | Miasto || Zamów | FK_Fact_Order_Customer_Key_Dimension_Customer | Klient || Zamów | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item | Pozycja magazynowa || Zamów | FK_Fact_Order_Order_Date_Key_Dimension_Date | Data || Zamów | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Data || Zamów | FK_Fact_Order_Salesperson_Key_Dimension_Employee | Pracownik || Zamów | FK_Fact_Order_Picker_Key_Dimension_Employee | Pracownik |+--------------------------+-------------------------------------- -----------------+------------+

W tym przypadku używam WideWorldImportersDW bazy danych i zwracam klucze obce dla Fact.Order tabela.

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 na podstawie tabeli kluczy obcych, więc możemy to zrobić:

EXEC sp_fkeys @fktable_name ='Zamówienie', @fktable_owner ='Fakt';

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

-[ REKORD 1 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | MiastoPKCOLUMN_NAME | Klucz miastaFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Klucz miasta KEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7-[ REKORD 2 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | CustomerPKCOLUMN_NAME | Klucz klientaFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Klucz klienta KEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7-[ REKORD 3 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | DataPKCOLUMN_NAME | DataFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Data zamówienia KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ REKORD 4 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | DataPKCOLUMN_NAME | DataFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Wybrana data KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ REKORD 5 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | PracownikPKCOLUMN_NAME | Klucz pracownikaFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Sprzedawca KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ REKORD 6 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | PracownikPKCOLUMN_NAME | Klucz pracownikaFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Selektor KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ REKORD 7 ]-------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | WymiarPKTABLE_NAME | Pozycja magazynowaPKCOLUMN_NAME | Pozycja magazynowa KeyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ZamówFKCOLUMN_NAME | Pozycja magazynowa KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock ItemPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7

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

EXEC sp_fkeys @pktable_name ='Miasto', @pktable_owner ='Wymiar';

Prawda/fałszywa kontrola

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

Ten artykuł używa TableHasForeignKey argument OBJECTPROPERTY() funkcja zwracająca 1 jeśli tabela ma 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. SQL Server 2016:Utwórz login

  2. Niestandardowe ciągi formatu liczbowego obsługiwane przez FORMAT() w SQL Server

  3. SqlDataSourceEnumerator.Instance.GetDataSources() nie lokalizuje lokalnego wystąpienia serwera SQL 2008

  4. przenieść dane z MS SQL do PostgreSQL?

  5. 5 sposobów na uzyskanie skróconej nazwy miesiąca z daty w SQL Server