sp_fkeys (Transact-SQL)

適用対象:SQL ServerAzure SQL データベースAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の Warehouse

現在の環境への論理外部キーの情報を返します。 この手順では、無効な外部キーを含む外部キーリレーションシップを示します。

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 操作が更新された場合に外部キーに適用されるアクション。 指定できる値
0= 外部キーに対する CASCADE の変更。
1 = 外部キーが存在する場合、ACTION は変更されません。
2 = null を設定する
3 = 既定値を設定
DELETE_RULE smallint SQL 操作が削除されるときに外部キーに適用されるアクション。 指定できる値
0= 外部キーに対する CASCADE の変更。
1 = 外部キーが存在する場合、ACTION は変更されません。
2 = null を設定する
3 = 既定値を設定
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 です。

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

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

例: Azure Synapse Analytics、Analytics Platform System (PDW)

次の例では、データベース内のテーブルの外部キーの DimDate 一覧を AdventureWorksPDW2012 取得します。 Azure Synapse Analytics では外部キーがサポートされていないため、行は返されません。

EXEC sp_fkeys @pktable_name = N'DimDate';  

参照

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