SQL Serverの特定のテーブルを参照するすべての外部キーを返す必要がある場合は、次のいずれかの方法を試してください。
最初のメソッドは、sys.foreign_keys
を照会します システムビュー。 2番目のメソッドは、sp_fkeys
を実行します システムストアドプロシージャ。
オプション1– sys.foreign_keys
次のコードは、主キーと外部キーテーブルとともに、特定のテーブルを参照するすべての外部キーを取得します。外部キーテーブルのスキーマも含めます。
USE WideWorldImportersDW; SELECT OBJECT_NAME(referenced_object_id) AS [PK Table], name AS [Foreign Key], SCHEMA_NAME(schema_id) AS [FK Schema], OBJECT_NAME(parent_object_id) AS [FK Table] FROM sys.foreign_keys WHERE referenced_object_id = OBJECT_ID('Dimension.City');
結果:
+------------+---------------------------------------+-------------+------------+ | PK Table | Foreign Key | FK Schema | FK Table | |------------+---------------------------------------+-------------+------------| | City | FK_Fact_Order_City_Key_Dimension_City | Fact | Order | | City | FK_Fact_Sale_City_Key_Dimension_City | Fact | Sale | +------------+---------------------------------------+-------------+------------+
この場合、私は WideWorldImportersDWを使用しています データベース、およびDimension.City
を参照する外部キーを返します テーブル(Dimension.City
テーブルには、外部キーが参照する主キー列が含まれています。
オプション2– sp_fkeys
特定のテーブルを参照する外部キーを取得する別の方法は、sp_fkeys
を使用することです。 システムストアドプロシージャ。このストアドプロシージャを使用すると、(とりわけ)参照テーブルまたは参照テーブルに基づいて外部キーを取得することができます。
この場合、特定のテーブルを参照する外部キーを取得することに関心があるので、これを行うことができます:
EXEC sp_fkeys @pktable_name = 'City', @pktable_owner = 'Dimension';
結果(垂直出力を使用):
-[ 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 | City PKCOLUMN_NAME | City Key FKTABLE_QUALIFIER | WideWorldImportersDW FKTABLE_OWNER | Fact FKTABLE_NAME | Sale FKCOLUMN_NAME | City Key KEY_SEQ | 1 UPDATE_RULE | 1 DELETE_RULE | 1 FK_NAME | FK_Fact_Sale_City_Key_Dimension_City PK_NAME | PK_Dimension_City DEFERRABILITY | 7
これは、パラメータを@fktable_name
に置き換えるだけで、外部キーテーブルに基づいて外部キーを検索するように簡単に切り替えることができます。 および@fktable_owner
:
EXEC sp_fkeys @fktable_name = 'Order', @fktable_owner = 'Fact';
正誤チェック
テーブルが外部キーによって参照されているかどうかを知りたいだけで、すべてをリストアップしたくない場合は、「OBJECTPROPERTY()を使用してSQLServerでテーブルが外部キーによって参照されているかどうかを確認する」を参照してください。
その記事ではTableHasForeignRef
を使用しています OBJECTPROPERTY()
の引数 1
を返す関数 テーブルが外部キーによって参照されている場合、および0
そうでない場合。