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 | 7Dette 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 forOBJECTPROPERTY()
funktion for at returnere1
hvis tabellen har en fremmednøgle, og0
hvis det ikke gør det.