以下は、SQLServerの特定のテーブルの外部キーのリストを返すために使用できる2つのメソッドです。
これは、参照/主キーテーブルに基づいて外部キーを返すのと似ていますが、ここでは、参照/外部キーテーブル自体に基づいて外部キーを返します。
オプション1– sys.foreign_keys
次のコードは、参照されたテーブルとともに、指定されたテーブルのすべての外部キー制約を取得します。
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_keys WHERE parent_object_id = OBJECT_ID('Fact.Order');
結果:
+------------+---------------------------------------------------+------------+ | FK Table | Foreign Key | PK Table | |------------+---------------------------------------------------+------------| | Order | FK_Fact_Order_City_Key_Dimension_City | City | | Order | FK_Fact_Order_Customer_Key_Dimension_Customer | Customer | | Order | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item | Stock Item | | Order | FK_Fact_Order_Order_Date_Key_Dimension_Date | Date | | Order | FK_Fact_Order_Picked_Date_Key_Dimension_Date | Date | | Order | FK_Fact_Order_Salesperson_Key_Dimension_Employee | Employee | | Order | FK_Fact_Order_Picker_Key_Dimension_Employee | Employee | +------------+---------------------------------------------------+------------+
この場合、私は WideWorldImportersDWを使用しています データベース、およびFact.Order
の外部キーを返します テーブル。
オプション2– sp_fkeys
特定のテーブルを参照する外部キーを取得する別の方法は、sp_fkeys
を使用することです。 システムストアドプロシージャ。このストアドプロシージャを使用すると、(とりわけ)参照テーブルまたは参照テーブルに基づいて外部キーを取得することができます。
この場合、外部キーテーブルに基づいて外部キーを取得することに関心があるので、これを行うことができます:
EXEC sp_fkeys @fktable_name = 'Order', @fktable_owner = 'Fact';
結果(垂直出力を使用):
-[ 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 | Customer PKCOLUMN_NAME | Customer Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | Customer Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_Customer_Key_Dimension_Customer PK_NAME | PK_Dimension_Customer DEFERRABILITY | 7 -[ RECORD 3 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | Date PKCOLUMN_NAME | Date FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | Order Date Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_Order_Date_Key_Dimension_Date PK_NAME | PK_Dimension_Date DEFERRABILITY | 7 -[ RECORD 4 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | Date PKCOLUMN_NAME | Date FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | Picked Date Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_Picked_Date_Key_Dimension_Date PK_NAME | PK_Dimension_Date DEFERRABILITY | 7 -[ RECORD 5 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | Employee PKCOLUMN_NAME | Employee Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | Salesperson Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_Salesperson_Key_Dimension_Employee PK_NAME | PK_Dimension_Employee DEFERRABILITY | 7 -[ RECORD 6 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | Employee PKCOLUMN_NAME | Employee Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | Picker Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_Picker_Key_Dimension_Employee PK_NAME | PK_Dimension_Employee DEFERRABILITY | 7 -[ RECORD 7 ]------------------------- PKTABLE_QUALIFIER | WideWorldImportersDW PKTABLE_OWNER | Dimension PKTABLE_NAME | Stock Item PKCOLUMN_NAME | Stock Item Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Order FKCOLUMN_NAME | Stock Item Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Order_Stock_Item_Key_Dimension_Stock Item PK_NAME | PK_Dimension_Stock_Item DEFERRABILITY | 7
これは、パラメータを@pktable_name
に置き換えるだけで、主キーテーブルに基づいて外部キーを検索するように簡単に切り替えることができます。 および@pktable_owner
:
EXEC sp_fkeys @pktable_name = 'City', @pktable_owner = 'Dimension';
正誤チェック
テーブルに外部キーがあるかどうかを知りたいだけで、すべてをリストしたくない場合は、「OBJECTPROPERTY()を使用してSQLServerでテーブルに外部キーがあるかどうかを確認する」を参照してください。
その記事では、TableHasForeignKey
を使用しています OBJECTPROPERTY()
の引数 1
を返す関数 テーブルに外部キーがある場合、および0
そうでない場合。