sql >> Database teknologi >  >> RDS >> Sqlserver

Liste alle udenlandske nøgler på en tabel i SQL Server

Nedenfor er to metoder, du kan bruge til at returnere en liste over fremmednøgler for en given tabel i SQL Server.

Dette svarer til at returnere fremmednøglerne baseret på den refererede/primære nøgletabel, bortset fra at her returnerer jeg fremmednøglerne baseret på selve reference-/fremmednøgletabellen.

Mulighed 1 – sys.foreign_keys

Den følgende kode henter alle fremmednøglebegrænsninger på den givne tabel sammen med de refererede tabeller.

BRUG 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('F); før> 

Resultat:

+------------+-------------------------------- ------------------+------------+| FK Tabel | Fremmednøgle | PK-tabel ||------------+---------------------------------------- ------------------+------------|| Bestil | FK_Fact_Order_City_Key_Dimension_City | By || Bestil | FK_Fact_Order_Customer_Key_Dimension_Customer | Kunde || Bestil | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item | Lagervare || Bestil | FK_Fact_Order_Order_Date_Key_Dimension_Date | Dato || Bestil | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Dato || Bestil | FK_Fact_Order_Salesperson_Key_Dimension_Employee | Medarbejder || Bestil | FK_Fact_Order_Picker_Key_Dimension_Employee | Medarbejder |+------------+---------------------------------------- ------------------+------------+

I dette tilfælde bruger jeg WideWorldImportersDW database, og jeg returnerer fremmednøglerne til Fact.Order tabel.

Mulighed 2 – sp_fkeys

En anden måde at få de fremmednøgler, der refererer til en bestemt tabel, er at bruge sp_fkeys system lagret procedure. Denne lagrede procedure giver os muligheden for at få fremmednøgler baseret på (blandt andet) den refererede tabel eller referencetabellen.

I dette tilfælde er vi interesserede i at få fremmednøglerne baseret på fremmednøgletabellen, så vi kan gøre dette:

EXEC sp_fkeys @fktable_name ='Ordre', @fktable_owner ='Fakta';

Resultat (ved hjælp af lodret output):

-[ RECORD 1 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | ByPKCOLUMN_NAME | BynøgleFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | BynøgleKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_City_Key_Dimension_CityPK_NAME | PK_Dimension_CityDEFERRABILITY | 7-[ RECORD 2 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | KundePKCOLUMN_NAME | KundenøgleFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | KundenøgleKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Customer_Key_Dimension_CustomerPK_NAME | PK_Dimension_CustomerDEFERRABILITY | 7-[ RECORD 3 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | DatoPKCOLUMN_NAME | DatoFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | Bestillingsdato KeyKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ RECORD 4 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | DatoPKCOLUMN_NAME | DatoFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | Valgt datonøgleKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_DatePK_NAME | PK_Dimension_DateDEFERRABILITY | 7-[ RECORD 5 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | MedarbejderPKCOLUMN_NAME | MedarbejdernøgleFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | Sælger KeyKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ RECORD 6 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | MedarbejderPKCOLUMN_NAME | MedarbejdernøgleFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | VælgernøgleKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Picker_Key_Dimension_EmployeePK_NAME | PK_Dimension_EmployeeDEFERRABILITY | 7-[ RECORD 7 ]--------------------------------PKTABLE_QUALIFIER | WideWorldImportersDWPKTABLE_OWNER | DimensionPKTABLE_NAME | LagervarePKCOLUMN_NAME | Lagervare NøgleFKTABLE_QUALIFIER | WideWorldImportersDWFKTABLE_OWNER | FaktaFKTABLE_NAME | Bestil FKCOLUMN_NAME | Lagervare KeyKEY_SEQ | 1UPDATE_REGEL | 1DELETE_RULE | 1FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock ItemPK_NAME | PK_Dimension_Stock_ItemDEFERRABILITY | 7

Dette kan nemt skiftes rundt for at søge efter fremmednøgler baseret på primærnøgletabellen ved blot at erstatte parametrene med @pktable_name og @pktable_owner :

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

Et sandt/falskt tjek

Hvis du blot vil vide, om en tabel har en fremmednøgle eller ej, men du ikke vil have det hele opført, skal du se Tjek, om en tabel har en fremmednøgle i SQL Server med OBJECTPROPERTY().

Denne artikel bruger TableHasForeignKey argument for OBJECTPROPERTY() funktion for at returnere 1 hvis tabellen har en fremmednøgle, og 0 hvis det ikke gør det.


  1. Er det dårligt design at bruge arrays i en database?

  2. Sådan bruges NVL()-funktionen i Oracle

  3. Resultatcache

  4. Sådan omdøbes en kolonne i SQL