sp_fkeys (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 の既定のテーブル可視性規則が適用されます。@pktable_owner を指定しない場合、検索対象は dbo スキーマのみになります。
- [ @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 の既定のテーブル可視性規則が適用されます。@fktable_owner を指定しない場合、検索対象は dbo スキーマのみになります。
- [ @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 : 外部キーが存在する場合には変更します。 2=SET_NULL : 外部キーを NULL に設定します。 |
DELETE_RULE |
smallint |
SQL の操作が削除であるとき、外部キーに適用される動作です。SQL Server はこれらの列に 0 または 1 を返します。 0=CASCADE : 外部キーを変更します。 1=NO ACTION : 外部キーが存在する場合には変更します。 2=SET_NULL : 外部キーを NULL に設定します。 |
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)、その後再び有効にします。NOT FOR REPLICATION オプションの詳細については、「NOT FOR REPLICATION を使用した制約、ID、およびトリガの制御」を参照してください。
- トリガまたはアプリケーション コードを使用して、リレーションシップを設定します。
主キー テーブルの名前を指定され、外部キー テーブルの名前が NULL の場合、sp_fkeys は指定されたテーブルに対する外部キーを含むすべてのテーブルを返します。外部キー テーブルの名前を指定し、主キー テーブルの名前が NULL の場合、sp_fkeys は、主キー/外部キー関係によって外部キー テーブルの外部キーに関係付けられるすべてのテーブルを返します。
sp_fkeys ストアド プロシージャは、ODBC の SQLForeignKeys に相当します。
権限
スキーマに対する SELECT 権限が必要です。
戻り値
ありません。
例
次の例では、AdventureWorks
データベース内の HumanResources.Department
テーブルに対するすべての外部キーの一覧を取得します。
USE AdventureWorks;
GO
EXEC sp_fkeys @pktable_name = N'Department',
@pktable_owner = N'HumanResources'
参照
関連項目
ストアド プロシージャ カタログ (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)
sp_pkeys (Transact-SQL)