sql >> データベース >  >> RDS >> Sqlserver

SQLServerの特定のテーブルを参照するすべての外部キーを返す

    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 そうでない場合。


    1. Where句に応じてSQLServerクエリがタイムアウトする

    2. SQLServerの2つの異なるサーバーからデータを選択する

    3. varbinaryを文字列に変換するSQLServer

    4. SalesforceAPIクエリのカーソル制限