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

SQLServerのテーブルにあるすべての外部キーを一覧表示する

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


    1. Hibernateを使用して階層結果を取得するためのデータベースクエリの再帰-Java

    2. PHPファイルはコードの一部を入力できません

    3. greendaoを使用して2つのテーブルから複数の列を選択します

    4. psycopg2のインストール中にエラーが発生しました。-lsslのライブラリが見つかりません