sp_fkeys (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のウェアハウス
現在の環境への論理外部キーの情報を返します。 このプロシージャでは、無効にされている外部キーも含めて、外部キーのリレーションシップが示されます。
構文
sp_fkeys
[ [ @pktable_name = ] N'pktable_name' ]
[ , [ @pktable_owner = ] N'pktable_owner' ]
[ , [ @pktable_qualifier = ] N'pktable_qualifier' ]
[ , [ @fktable_name = ] N'fktable_name' ]
[ , [ @fktable_owner = ] N'fktable_owner' ]
[ , [ @fktable_qualifier = ] N'fktable_qualifier' ]
[ ; ]
引数
[ @pktable_name = ] N'pktable_name'
カタログ情報を返すために使用される、主キーを持つテーブルの名前。 @pktable_name は sysname で、既定値は NULL
です。 ワイルドカード パターン マッチングはサポートされていません。 このパラメーターまたは @fktable_name パラメーター、またはその両方を指定する必要があります。
[ @pktable_owner = ] N'pktable_owner'
カタログ情報を返すために使用されるテーブルの所有者 (主キーを持つ) の名前。 @pktable_owner は sysname で、既定値は NULL
です。 ワイルドカード パターン マッチングはサポートされていません。 @pktable_ownerが指定されていない場合は、基になるデータベース管理システム (DBMS) の既定のテーブル可視性ルールが適用されます。
SQL Server では、指定した名前のテーブルを現在のユーザーが所有している場合、そのテーブルの列が返されます。 @pktable_ownerが指定されておらず、現在のユーザーが指定した@pktable_nameを持つテーブルを所有していない場合、プロシージャは、データベース所有者が所有する指定した@pktable_nameを持つテーブルを検索します。 存在する場合は、そのテーブルの列が返されます。
[ @pktable_qualifier = ] N'pktable_qualifier'
(主キーを持つ) テーブル修飾子の名前。 @pktable_qualifier は sysname で、既定値は NULL
です。 さまざまな DBMS 製品で、テーブルについて 3 パート構成の名前 (qualifier.owner.name) がサポートされています。 SQL Server では、この修飾子はデータベース名を表します。 一部の製品では、テーブルのデータベース環境のサーバー名を表します。
[ @fktable_name = ] N'fktable_name'
カタログ情報を返すために使用される (外部キーを持つ) テーブルの名前。 @fktable_name は sysname で、既定値は NULL
です。 ワイルドカード パターン マッチングはサポートされていません。 このパラメーターまたは @pktable_name パラメーター、またはその両方を指定する必要があります。
[ @fktable_owner = ] N'fktable_owner'
カタログ情報を返すために使用されるテーブルの所有者 (外部キーを持つ) の名前。 @fktable_owner は sysname で、既定値は NULL
です。 ワイルドカード パターン マッチングはサポートされていません。 @fktable_ownerが指定されていない場合は、基になる DBMS の既定のテーブル可視性ルールが適用されます。
SQL Server では、指定した名前のテーブルを現在のユーザーが所有している場合、そのテーブルの列が返されます。 @fktable_ownerが指定されておらず、現在のユーザーが指定した@fktable_nameを持つテーブルを所有していない場合、プロシージャは、指定された@fktable_nameがデータベース所有者によって所有されているテーブルを検索します。 存在する場合は、そのテーブルの列が返されます。
[ @fktable_qualifier = ] N'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 = NO ACTION 外部キーが存在する場合は変更されます。2 = SET_NULL 3 = 既定値に設定 |
DELETE_RULE |
smallint | SQL の操作が削除のときに外部キーに適用されるアクション。 指定できる値0 = CASCADE 外部キーに対する変更。1 = NO ACTION 外部キーが存在する場合は変更されます。2 = SET_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
アクセス許可が必要です。
例
次の例では、AdventureWorks2022
データベースの HumanResources.Department
テーブルの外部キーの一覧が取得されます。
USE AdventureWorks2022;
GO
EXEC sp_fkeys
@pktable_name = N'Department',
@pktable_owner = N'HumanResources';
例: Azure Synapse Analytics、Analytics Platform System (PDW)
次の例では、AdventureWorksPDW2012
データベースの DimDate
テーブルの外部キーの一覧が取得されます。 Azure Synapse Analytics では外部キーがサポートされていないため、行は返されません。
EXEC sp_fkeys @pktable_name = N'DimDate';