次の方法で共有


sp_fkeys (Transact-SQL)

現在の環境への論理外部キーの情報を返します。 このプロシージャは、無効化されている外部キーも含めて、外部キーのリレーションシップを示します。

適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Windows Azure SQL データベース (初回のリリースから現在のバージョンまで)

トピック リンク アイコン Transact-SQL 構文表記規則

構文

sp_fkeys [ @pktable_name = ] 'pktable_name' 
     [ , [ @pktable_owner = ] 'pktable_owner' ] 
     [ , [ @pktable_qualifier = ] 'pktable_qualifier' ] 
     { , [ @fktable_name = ] 'fktable_name' } 
     [ , [ @fktable_owner = ] 'fktable_owner' ] 
     [ , [ @fktable_qualifier = ] 'fktable_qualifier' ]

引数

  • [ @pktable\_name=\] 'pktable_name'
    カタログ情報を返すために使用する、主キーが設定されたテーブルの名前を指定します。 pktable_name のデータ型は sysname で、既定値は NULL です。 ワイルドカードによるパターン照合はサポートされていません。 このパラメーターと fktable_name パラメーターのいずれか、または両方を指定する必要があります。

  • [ @pktable\_owner=\] 'pktable_owner'
    カタログ情報を返すために使用する (主キーが設定された) テーブルの所有者の名前を指定します。 pktable_owner のデータ型は sysname で、既定値は NULL です。 ワイルドカードによるパターン照合はサポートされていません。 pktable_owner を指定しない場合は、基になる DBMS の既定のテーブル可視性規則が適用されます。

    SQL Server では、指定した名前のテーブルを現在のユーザーが所有している場合、そのテーブルの列が返されます。 pktable_owner を指定せず、また指定した pktable_name のテーブルを現在のユーザーが所有していない場合は、データベース所有者が所有する、指定した pktable_name のテーブルが検索されます。 存在する場合は、そのテーブルの列が返されます。

  • [ @pktable\_qualifier =] 'pktable_qualifier'
    (主キーが設定された) テーブル修飾子の名前を指定します。 pktable_qualifier のデータ型は sysname で、既定値は NULL です。 さまざまな DBMS 製品において、テーブル名には 3 つの要素から成る名前 (qualifier.owner.name) がサポートされています。 SQL Server では、修飾子はデータベース名を表します。 製品によっては、テーブルのデータベース環境のサーバー名を表す場合があります。

  • [ @fktable\_name=\] 'fktable_name'
    カタログ情報を返すために使用する (外部キーが設定された) テーブルの名前を指定します。 fktable_name のデータ型は sysname で、既定値は NULL です。 ワイルドカードによるパターン照合はサポートされていません。 このパラメーターと pktable_name パラメーターのいずれか、または両方を指定する必要があります。

  • [ @fktable\_owner =] 'fktable_owner'
    カタログ情報を返すために使用する (外部キーが設定された) テーブルの所有者の名前を指定します。 fktable_owner のデータ型は sysname で、既定値は NULL です。 ワイルドカードによるパターン照合はサポートされていません。 fktable_owner を指定しない場合は、基になる DBMS の既定のテーブル可視性規則が適用されます。

    SQL Server では、指定した名前のテーブルを現在のユーザーが所有している場合、そのテーブルの列が返されます。 fktable_owner を指定せず、また指定した fktable_name のテーブルを現在のユーザーが所有していない場合は、データベース所有者が所有する、指定した fktable_name のテーブルが検索されます。 存在する場合は、そのテーブルの列が返されます。

  • [ @fktable\_qualifier= ] 'fktable_qualifier'
    (外部キーが設定された) テーブル修飾子の名前を指定します。 fktable_qualifier のデータ型は sysname で、既定値は NULL です。 SQL Server では、修飾子はデータベース名を表します。 製品によっては、テーブルのデータベース環境のサーバー名を表す場合があります。

リターン コードの値

なし

結果セット

列名

データ型

説明

PKTABLE_QUALIFIER

sysname

主キーが設定されたテーブルの修飾子の名前です。 このフィールドには NULL を指定できます。

PKTABLE_OWNER

sysname

主キーが設定されたテーブルの所有者名です。 このフィールドは常に値を返します。

PKTABLE_NAME

sysname

主キーが設定されたテーブルの名前です。 このフィールドは常に値を返します。

PKCOLUMN_NAME

sysname

返される TABLE_NAME の各列に対する、主キー列の名前です。 このフィールドは常に値を返します。

FKTABLE_QUALIFIER

sysname

外部キーが設定されたテーブルの修飾子の名前です。 このフィールドには NULL を指定できます。

FKTABLE_OWNER

sysname

外部キーが設定されたテーブルの所有者名です。 このフィールドは常に値を返します。

FKTABLE_NAME

sysname

外部キーが設定されたテーブルの名前です。 このフィールドは常に値を返します。

FKCOLUMN_NAME

sysname

返される TABLE_NAME の各列に対する、外部キー列の名前です。 このフィールドは常に値を返します。

KEY_SEQ

smallint

複数列の主キーにおける、列のシーケンス番号です。 このフィールドは常に値を返します。

UPDATE_RULE

smallint

SQL の操作が更新であるとき、外部キーに適用される動作です。 SQL Server はこれらの列に 0 または 1 を返します。

0=CASCADE: 外部キーを変更します。

1=NO ACTION: 外部キーが存在する場合には変更します。

DELETE_RULE

smallint

SQL の操作が削除であるとき、外部キーに適用される動作です。 SQL Server はこれらの列に 0 または 1 を返します。

0=CASCADE: 外部キーを変更します。

1=NO ACTION: 外部キーが存在する場合には変更します。

FK_NAME

sysname

外部キー識別子です。 データ ソースに適用されない場合は NULL になります。 SQL Server は、FOREIGN KEY 制約の名前を返します。

PK_NAME

sysname

主キー識別子。 データ ソースに適用されない場合は NULL になります。 SQL Server は、PRIMARY KEY 制約の名前を返します。

返される結果は、FKTABLE_QUALIFIER、FKTABLE_OWNER、FKTABLE_NAME、および KEY_SEQ の順序に従って並べ替えられます。

説明

無効な外部キーを持つテーブルを含むアプリケーションのコーディングは、以下のように実装できます。

  • そのテーブルで作業している間は、一時的に制約チェックを無効にして (ALTER TABLE NOCHECK または CREATE TABLE NOT FOR REPLICATION)、その後再び有効にします。

  • トリガーまたはアプリケーション コードを使用して、リレーションシップを設定します。

主キー テーブルの名前を指定され、外部キー テーブルの名前が NULL の場合、sp_fkeys は指定されたテーブルに対する外部キーを含むすべてのテーブルを返します。 外部キー テーブルの名前を指定し、主キー テーブルの名前が NULL の場合、sp_fkeys は、主キー/外部キー関係によって外部キー テーブルの外部キーに関係付けられるすべてのテーブルを返します。

sp_fkeys ストアド プロシージャは、ODBC の SQLForeignKeys に相当します。

権限

スキーマに対する SELECT 権限が必要です。

使用例

次の例では、AdventureWorks2012 データベース内の HumanResources.Department テーブルに対するすべての外部キーの一覧を取得します。

USE AdventureWorks2012;
GO
EXEC sp_fkeys @pktable_name = N'Department'
    ,@pktable_owner = N'HumanResources';

関連項目

参照

ストアド プロシージャ カタログ (Transact-SQL)

システム ストアド プロシージャ (Transact-SQL)

sp_pkeys (Transact-SQL)