sql >> Databáze >  >> RDS >> Sqlserver

Seznam všech cizích klíčů v tabulce na serveru SQL

Níže jsou uvedeny dvě metody, které můžete použít k vrácení seznamu cizích klíčů pro danou tabulku na serveru SQL Server.

Je to podobné jako vrácení cizích klíčů na základě tabulky referenčních/primárních klíčů, kromě toho, že zde vracím cizí klíče na základě samotné tabulky referenčních/cizích klíčů.

Možnost 1 – sys.foreign_keys

Následující kód načte všechna omezení cizího klíče v dané tabulce spolu s odkazovanými tabulkami.

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_Order'Fact.); před> 

Výsledek:

+------------+--------------------------------- ------------------+------------+| Tabulka FK | Cizí klíč | Tabulka PK ||------------+--------------------------------- ------------------+------------|| Objednávka | FK_Fact_Order_City_Key_Dimension_City | Město || Objednávka | FK_Fact_Order_Customer_Key_Dimension_Customer | Zákazník || Objednávka | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item | Skladová položka || Objednávka | FK_Fact_Order_Order_Date_Key_Dimension_Date | Datum || Objednávka | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Datum || Objednávka | FK_Fact_Order_Salesperson_Key_Dimension_Employee | Zaměstnanec || Objednávka | FK_Fact_Order_Picker_Key_Dimension_Employee | Zaměstnanec |+------------+----------------------------------- -----------------+------------+

V tomto případě používám WideWorldImportersDW databázi a vracím cizí klíče pro Fact.Order tabulka.

Možnost 2 – sp_fkeys

Dalším způsobem, jak získat cizí klíče, které odkazují na konkrétní tabulku, je použít sp_fkeys uložená procedura systému. Tato uložená procedura nám poskytuje možnost získat cizí klíče na základě (mimo jiné) referenční tabulky nebo referenční tabulky.

V tomto případě máme zájem získat cizí klíče na základě tabulky cizích klíčů, takže můžeme udělat toto:

EXEC sp_fkeys @fktable_name ='Objednávka', @fktable_owner ='Fakt';

Výsledek (při použití vertikálního výstupu):

-[ RECORD 1 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | MěstoPKCOLUMN_NAME | Klíč městaFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Klíč městaKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7-[ ZÁZNAM 2 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | ZákazníkPKCOLUMN_NAME | Zákaznický klíčFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Zákaznický klíčKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7-[ ZÁZNAM 3 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | DatumPKCOLUMN_NAME | DatumFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Datum objednávky KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ ZÁZNAM 4 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | DatumPKCOLUMN_NAME | DatumFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Klíč data výběruKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ ZÁZNAM 5 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | ZaměstnanecPKCOLUMN_NAME | Klíč zaměstnanceFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Prodejce KeyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ ZÁZNAM 6 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | ZaměstnanecPKCOLUMN_NAME | Klíč zaměstnanceFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Klíč výběruKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ ZÁZNAM 7 ]-------------------------KVALIFIKACE PKTABLE | WideWorldImportersDWPKTABLE_OWNER | DimenzePKTABLE_NAME | Skladová položkaPKCOLUMN_NAME | Klíč skladové položkyFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktFKTABLE_NAME | ObjednávkaFKCOLUMN_NAME | Klíč skladové položkyKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock ItemPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7

To lze snadno přepnout na vyhledávání cizích klíčů na základě tabulky primárních klíčů jednoduchým nahrazením parametrů @pktable_name a @pktable_owner :

EXEC sp_fkeys @pktable_name ='Město', @pktable_owner ='Dimenze';

Ověření pravdivosti/nepravdy

Pokud pouze chcete vědět, zda tabulka má nebo nemá cizí klíč, ale nechcete, aby byl celý uveden, přečtěte si téma Kontrola, zda tabulka obsahuje cizí klíč na serveru SQL pomocí OBJECTPROPERTY().

Tento článek používá TableHasForeignKey argument OBJECTPROPERTY() funkce vrátí 1 pokud má tabulka cizí klíč, a 0 pokud ne.


  1. Aktualizace databázových řádků bez zamykání tabulky v PostgreSQL 9.2

  2. Rozdíl mezi tabulkovou funkcí a zřetězenou funkcí?

  3. Zkontrolujte, zda je objekt uloženou procedurou pomocí OBJECTPROPERTY() na serveru SQL Server

  4. Jak určit hodnotu pole, kterou nelze převést na (desítkové, plovoucí, int) v SQL Server